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)を指定します。
その引数に子コンポーネントから渡されたデータが入っているので、適宜使用する形になります。
コメントが承認されるまで時間がかかります。