当前位置:首页 > VUE

eventbus vue实现

2026-01-07 07:21:59VUE

EventBus 实现原理

EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。

创建 EventBus

在 Vue 项目中创建一个独立的 EventBus 实例:

// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();

发送事件

在需要发送事件的组件中,通过 $emit 触发事件并传递数据:

// ComponentA.vue
import { EventBus } from './event-bus.js';

EventBus.$emit('event-name', { data: 'some data' });

监听事件

在需要接收事件的组件中,通过 $on 监听事件并处理数据:

// ComponentB.vue
import { EventBus } from './event-bus.js';

EventBus.$on('event-name', (data) => {
  console.log('Received data:', data);
});

移除监听

为避免内存泄漏,在组件销毁时移除事件监听:

// ComponentB.vue
beforeDestroy() {
  EventBus.$off('event-name');
}

全局 EventBus

若需全局使用,可将 EventBus 挂载到 Vue 原型上:

// main.js
import Vue from 'vue';
import App from './App.vue';

Vue.prototype.$eventBus = new Vue();

new Vue({
  render: h => h(App),
}).$mount('#app');

使用时直接通过 this.$eventBus 访问:

// 发送事件
this.$eventBus.$emit('global-event');

// 监听事件
this.$eventBus.$on('global-event', () => {});

注意事项

  • 避免过度使用 EventBus,复杂场景建议使用 Vuex。
  • 确保及时移除监听,防止内存泄漏。
  • 事件命名建议使用常量或统一前缀,避免冲突。

替代方案

对于简单场景,也可直接使用 Vue 内置的 $emit$on

eventbus vue实现

// 父组件监听子组件事件
<child-component @custom-event="handleEvent" />

// 子组件触发事件
this.$emit('custom-event', data);

标签: eventbusvue
分享给朋友:

相关文章

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…