Vue.jsでコンポーネント間でデータのやり取りをする

Vue.jsで親子のコンポーネント間でデータのやり取りをする方法を試してみます。
使用しているVueのバージョンは2系になります。

親から子にデータを渡す

親コンポーネントをParent.vue、子コンポーネントをChild.vueとして試してみます。
まずは子コンポーネントにデータを渡す方法です。

Child.vue

<template>
  <div>
    <p>{{ text }}</p>
  </div>
</template>
<script>
export default {
  props: ['text']
}
</script>

propsで親コンポーネントから受け取りたい値の名前を指定します。
次にParent.vueです。

Parent.vue

<template>
  <div>
    <Child text="親からの値"/>
  </div>
</template>
<script>
import Child from './Child.vue'
export default {
  components: {
    Child
  }
}
</script>

子コンポーネントで指定した名前(text)を属性として指定します。
これで親コンポーネントから子コンポーネントへ値を渡すことができました。

子から親にデータを渡す

次に子コンポーネントから親にデータを渡す方法ですが、子から親へデータを渡す場合、何らかのイベント発生のタイミングでデータを渡す形になります。

Child.vue

<template>
  <div>
    <button @click="clickEvent">ボタン</button>
  </div>
</template>
<script>
export default {
  methods: {
    clickEvent() {
      this.$emit('custom-click', '送る値');
    }
  }
}
</script>

ボタンをクリックするとclickEventが実行され、その中で$emitを使って親コンポーネントにデータを渡しています。
$emitの引数は1つ目がカスタムイベント名、2つ目がイベント時に渡す値を指定します。

次にParent.vueです。

Parent.vue

<template>
  <div>
    <p>{{ text }}</p>
    <Child v-on:custom-click="getEvent"/>
  </div>
</template>
<script>
import Child from './Child.vue'
export default {
  components: {
    Child
  },
  data() {
    return {
      text: '初期値'
    }
  },
  methods: {
    getEvent($event) {
      this.text = $event;
    }
  }
}
</script>

v-onで子コンポーネントで指定したカスタムイベント名(custom-click)を設定し、受け取った際に実行する関数(getEvent)を指定します。
その引数に子コンポーネントから渡されたデータが入っているので、適宜使用する形になります。

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930