📖

Vue.js refで関数を実行した場合の子からのemitを受け取る方法

2023/12/27に公開

Vue.js refで関数を実行した場合の子からのemitを受け取る方法

テンプレートでv-onでemit結果をハンドルするのではなく、JS側で結果を受け取りたい。
マニュアルによると、
プログラム的なイベントリスナーで対処できるとのこと。

特定のイベントを監視する$on(eventName, eventHandler)
<template>
  <div>
    <div v-if="isActive">
       <ChildModal ref="childModal" />
    </div>
  </div>
</template>
export default {
  data() {
    return {
      isActive: false,
      }
  },
  methods: {
    // モーダルを開く
    onOpenModal() {
      this.isActive = true;
      ・・・・
      this.$emit('onOpenModal', result);
    }
  }
}    
<template>
  <div>
    <ChildComponent ref="childModal" />
  </div>
</template>

<script>
import ChildComponent from '@/path/to/ChildComponent.vue'; 
export default {
  components: {
    ChildComponent,
  },
  mounted() {
    // refを使用して子コンポーネントを取得
    const childModalComponent = this.$refs.childModal;

    // 子コンポーネントで発生するイベントを直接リッスン
    childModalComponent.$on('onOpenModal', this.handleOpenchildModal);
  },
  methods: {
    handleOpenchildModal(result) {
      // openchildModalイベントが発生したときの処理
      console.log('Received event from child event:', result);
      // 他の処理を追加できます
    },
    // 他のメソッドやデータなど
  },
};
</script>

Discussion