如何在Vue3中使用全局事件总线eventBus进行组件通信
Mitt库
vue3取消了全局实例的$on,$off,所以可以借助轻量Mitt库实现
200bytes轻量库,进行组件通信,可以跨平台使用,支持批量监听和批量移除。
以下为vue3+ts项目中使用Mitt的方法
import { createApp } from 'vue'
import App from './App.vue'
import mitt from "mitt";
const Mit = mitt()
// TypeScript注册,必须注册ComponentCustomProperties类型才能获得类型提示
declare module 'vue' {
export interface ComponentCustomProperties {
emitter: typeof Mit
}
}'
const app = createApp(App)
// 全局挂载emitter方法
app.config.globalProperties.emitter = Mit
app.mount('#app')
组件A实例中发布事件emit
<script setup lang='ts'>
import {getCurrentInstance} from 'vue'
const instance = getCurrentInstance()
// emit为自定义的发布事件,由于配置过类型提示,会出现 all | emit | on | clear
// emit接受第一个参数为事件名(自定义),第二个参数为传递的值
const emit = () => {
instance?.proxy?.emitter.emit('mitt-foo','strValue')
}
</script>
组件B实例中订阅事件on,完成组件通信,拿到A组件传递过来的值
<script setup lang='ts'>
import {getCurrentInstance} from 'vue'
const instance = getCurrentInstance()
// on为订阅事件
// on接受第一个参数为事件名(同发布事件名),通配符*为监听所有,第二个参数接受一个回调
instance?.proxy?.emitter.on('mitt-foo',(params)=>{
console.log(params);
})
// instance?.proxy?.emitter.on('*',()=>{ console.log('监听所有事件') })
// cancelMitt为自定义的解绑监听事件
const cancelMitt = ():void=>{
instance?.proxy?.emitter.off('mitt-xiaoman')
// instance?.proxy?.emitter.all.clear() // all方法全部解绑
}
</script>
洗尽铅华始见金,褪去浮华归本真
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南