vue中eventbus实现
Vue 中 EventBus 的实现
EventBus 是一种跨组件通信的机制,适用于非父子关系的组件间传递数据。以下是具体实现方法:
创建 EventBus 实例
在项目中创建一个单独的 JavaScript 文件(如 event-bus.js),通过 Vue 实例初始化 EventBus:
import Vue from 'vue';
export const EventBus = new Vue();
发送事件
在需要发送数据的组件中,通过 $emit 方法触发事件并传递数据:

import { EventBus } from './event-bus.js';
EventBus.$emit('eventName', data);
eventName:自定义事件名称。data:需要传递的数据(可选)。
监听事件
在接收数据的组件中,通过 $on 方法监听事件并处理数据:
import { EventBus } from './event-bus.js';
EventBus.$on('eventName', (data) => {
console.log('Received data:', data);
});
移除事件监听
为避免内存泄漏,在组件销毁时(如 beforeDestroy 钩子)移除事件监听:

import { EventBus } from './event-bus.js';
EventBus.$off('eventName');
注意事项
- 命名冲突:确保事件名称唯一,避免不同组件使用相同事件名。
- 内存管理:不使用的监听需及时移除,防止重复触发或内存泄漏。
- 替代方案:对于复杂应用,建议使用 Vuex 进行状态管理。
完整示例
发送组件(ComponentA.vue):
<template>
<button @click="sendMessage">Send Message</button>
</template>
<script>
import { EventBus } from './event-bus.js';
export default {
methods: {
sendMessage() {
EventBus.$emit('message', 'Hello from ComponentA');
}
}
};
</script>
接收组件(ComponentB.vue):
<template>
<div>{{ receivedMessage }}</div>
</template>
<script>
import { EventBus } from './event-bus.js';
export default {
data() {
return {
receivedMessage: ''
};
},
created() {
EventBus.$on('message', (msg) => {
this.receivedMessage = msg;
});
},
beforeDestroy() {
EventBus.$off('message');
}
};
</script>






