emitはイベントなので、v-on(@)で親側で受け取る

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