Vue3全局组件通信之EventBus
责任编辑:
梦想飞行
时间:2023-03-31
来源:转载于:https://www.jianshu.com/p/d8d55d8f0c48
责任编辑:
梦想飞行
时间:2023-03-31
来源:转载于:https://www.jianshu.com/p/d8d55d8f0c48
创建 3.x 的 EventBus
mitt
EventBus
首先,需要安装 mitt
:
npm install --save mitt
然后在 libs
文件夹下,创建一个 bus.ts
文件,内容和旧版写法其实是一样的,只不过是把 Vue 实例,换成了 mitt 实例。
import mitt from 'mitt';
export default mitt();
创建和移除监听事件
在需要暴露交流事件的组件里,通过 on
配置好接收方法,同时为了避免路由切换过程中造成事件多次被绑定,多次触发,需要在适当的时机 off
掉:
import { defineComponent, onBeforeUnmount } from 'vue'
import bus from '@libs/bus'
export default defineComponent({
setup () {
// 定义一个打招呼的方法
const sayHi = (msg: string = 'Hello World!'): void => {
console.log(msg);
}
// 启用监听
bus.on('sayHi', sayHi);
// 在组件卸载之前移除监听
onBeforeUnmount( () => {
bus.off('sayHi', sayHi);
})
}
})
调用监听事件
在需要调用交流事件的组件里,通过 emit
进行调用:
import { defineComponent } from 'vue'
import bus from '@libs/bus'
export default defineComponent({
setup () {
// 调用打招呼事件,传入消息内容
bus.emit('sayHi', '哈哈哈哈哈哈哈哈哈哈哈哈哈哈');
}
})
来源:转载于:https://www.jianshu.com/p/d8d55d8f0c48