vue bus总线实现原理
Vue Bus 总线实现原理
Vue Bus 是一种基于 Vue 的事件总线机制,用于在非父子组件之间进行通信。其核心原理是利用 Vue 实例的事件系统($emit、$on、$off)作为中央事件枢纽。
核心机制
-
事件总线实例
创建一个空的 Vue 实例作为事件中心,所有组件共享该实例:
const bus = new Vue(); -
事件触发与监听

- 组件通过
$emit触发事件:bus.$emit('event-name', payload); - 其他组件通过
$on监听事件:bus.$on('event-name', (payload) => { // 处理逻辑 });
- 组件通过
-
事件解绑
为避免内存泄漏,需在组件销毁时移除监听:beforeDestroy() { bus.$off('event-name'); }
实现示例
以下是一个完整的 Bus 总线实现代码:
// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();
// 组件A(触发事件)
EventBus.$emit('update-data', { value: 123 });
// 组件B(监听事件)
EventBus.$on('update-data', (payload) => {
console.log(payload.value); // 输出 123
});
注意事项
- 命名冲突:建议使用模块化导出 Bus 实例,避免全局污染。
- 内存管理:需手动清理无用监听,否则可能导致内存泄漏。
- 替代方案:Vue 3 推荐使用
mitt或tiny-emitter等第三方库,因 Vue 3 移除了$on/$$offAPI。
与 Vuex 对比
- 适用场景:Bus 适合简单场景的跨组件通信,Vuex 更适合复杂状态管理。
- 数据流:Bus 基于事件驱动,Vuex 提供集中式状态管理。






