emit は子コンポーネントから親コンポーネントへ イベントを発行する(発信する)ためのものです。
- 子コンポーネント は
this.$emit()を使ってイベントを発行します。このイベントは親コンポーネントに通知され、親はそのイベントを リスン(購読) することができます。 - 親コンポーネントは、子コンポーネントから発行されたイベントを
@(またはv-on)を使ってリスン(購読)し、そのイベントが発生したときに指定したメソッドを実行します。
具体例
子コンポーネント(Child.vue)
子コンポーネントは、何らかのアクション(例えばボタンのクリック)でイベントを発行します。
<template>
<button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
methods: {
sendMessage() {
// 'messageSent' イベントを親に送信する
this.$emit('messageSent', 'Hello from child');
}
}
}
</script>親コンポーネント(Parent.vue)
親コンポーネントは、子コンポーネントが発行した messageSent イベントを購読し、そのデータを受け取って処理します。
<template>
<Child @messageSent="handleMessage" />
</template>
<script>
import Child from './Child.vue';
export default {
components: {
Child
},
methods: {
handleMessage(message) {
console.log('Received from child:', message); // 'Hello from child' と表示される
}
}
}
</script>ポイント
- 子コンポーネントが
this.$emit('messageSent', 'Hello from child')を実行すると、親コンポーネントは@messageSent="handleMessage"を使ってこのイベントを購読しているので、handleMessageメソッドが呼ばれ、message('Hello from child')を受け取ります。
結論
emitは 子コンポーネント から 親コンポーネント へイベントを発行するために使います。- 親コンポーネントでは、そのイベントを
@(またはv-on)でリスン(購読)して、指定したメソッドを実行するという流れです。