前言
在 Vue3 中,由于 $on、$off、$emit 等实例方法被移除,官方不再推荐使用传统的 EventBus 模式。
mitt 是一个轻量级的事件发射器库,体积小(约 200 字节)且支持全部事件的监听 / 触发,是 Vue3 中实现 EventBus 的主流方案。
编译环境下使用
安装 mitt
1 | npm install mitt --save |
创建全局事件总线实例
在 src/utils/eventBus.js 中创建:
运行
1 | import mitt from 'mitt' |
使用事件总线
发送事件(A 组件)
1 | <script setup> |
监听事件(B 组件)
1 | <script setup> |
监听所有事件
1 | eventBus.on('*', (type, msg) => { |
清除所有事件
1 | eventBus.all.clear() // 适用于需要重置事件总线的场景 |
网页中使用
在一些事件注入的场景中,我们要在非编译的页面中监听事件,就要使用这种方式。
引用
在静态 HTML 页面的 <head> 或 <body> 中,通过 CDN 引入 mitt 库。
1 | <!-- 使用 unpkg CDN --> |
引入后,全局会暴露一个 mitt 函数,用于创建事件总线实例。
创建事件总线实例
在脚本中调用 mitt() 创建全局事件总线:
1 | <script> |
使用事件总线
可以在页面的任何脚本中使用 eventBus 进行事件通信。
例如:
1 | <script> |
完整示例
1 |
|