2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Vueへの配列の渡し方

Last updated at Posted at 2022-03-27

目次

1.ブログ編集画面に、編集前記事の配列を表示させたい
2.map関数

Laravel + Vue.js で、Vue側に配列を渡す処理をアウトプットとして書いてみました。

1. ブログ編集画面に、編集前記事の配列を表示させたい

今回実装させたかった機能は、
ブログ編集画面で、編集前の記事のカテゴリを、編集画面のカテゴリ入力フォームに表示させたい!
ということです。

スクリーンショット 2022-03-28 1.27.43.png

Laravel 単体だと、

edit.blade.php
<div class="form-group">
    <label for="exampleInputEmail1">カテゴリ</label>
    <input
    type="text"
    class="form-control"
    name="tagCategory"
    value="@foreach ($post->tags as $tag){{ $tag->tag_name }} @endforeach"
    />
</div>

こんな感じで value に foreach 文を書くことで実装できると思いますが、
今回はブログ編集画面に Vue を使っているためこのようにはできません。

2. map関数

そこで使うのが、map 関数!

まずは、v-bindを使いコントローラから Vue 側にカテゴリの配列を渡します。

<edit-component v-bind:tags="{{ ($post->tags) }}"> </edit-component>

this.tags 自体はオブジェクトの連想配列になっているため、
tag_nameだけを取り出した配列にしてあげないといけません。

ここで map 関数を使います!

EditComponent.vue

<script>

name: "EditComponent",

props: {      
    tags: { type: Array },
},

data(tags) {
    const category = this.tags.map((item) => "#" + item.tag_name );
    const tag_category = category.join("");

    return {
        tagCategory: tag_category,
    };
},

そして編集画面のカテゴリ入力画面を、v-model="tagCategory" で指定して

EditComponent.vue
<div class="form-group">
    <label for="exampleInputEmail1">カテゴリ</label>
    <input
    type="text"
    class="form-control"
    name="tagCategory"
    v-model="tagCategory"
    />
</div>

実際の画面がこんな感じです!
編集前の記事で使われていたカテゴリがちゃんと表示されました!
これでわざわざカテゴリを書き直す必要もありません。

スクリーンショット 2022-03-28 1.18.07.png

こんな便利なものがあったんだなぁ。
もっと勉強頑張りますっ!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?