vue3组件间通信
import mitt from 'mitt'
import { onBeforeUnmount } from 'vue'

interface Option {
  name: string // 事件名称
  callback: Fn // 回调
}

const emitter = mitt()

export const useEventBus = (option?: Option) => {
  if (option) {
    emitter.on(option.name, option.callback)

    onBeforeUnmount(() => {
      emitter.off(option.name)
    })
  }

  return {
    on: emitter.on,
    off: emitter.off,
    emit: emitter.emit,
    all: emitter.all
  }
}

使用安装mitt

npm install mitt

组件 A(触发事件):

<script setup>
import { useEventBus } from './path-to-useEventBus'; // 引入 useEventBus 函数

const { emit } = useEventBus();

const triggerEvent = () => {
  emit('my-event', 'Hello from Component A!');
};
</script>

<template>
  <button @click="triggerEvent">Send Event to Component B</button>
</template>

组件 B(监听事件):

<script setup>
import { useEventBus } from './path-to-useEventBus'; // 引入 useEventBus 函数

const { on, off } = useEventBus();

const handleEvent = (data) => {
  console.log('Event received in Component B:', data);
};

on('my-event', handleEvent);

// 组件卸载时取消监听
onBeforeUnmount(() => {
  off('my-event', handleEvent);
});
</script>

<template>
  <!-- Component B's template content -->
</template>


复制内容

留言讨论


评论


乖,登录后才可以留言! 登录

广而告之

Copyright © 2020-2023 春藤技术,春藤建站 All Rights Reserved
备案号:豫ICP备20020705号 公网安备 51LA统计