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
)でリスン(購読)して、指定したメソッドを実行するという流れです。