当前位置:首页 > VUE

vue bus实现原理

2026-02-17 12:55:19VUE

Vue Event Bus 实现原理

Vue Event Bus 是一种基于 Vue 实例的事件发布/订阅模式,用于组件间通信。其核心原理是利用 Vue 实例的 $emit$on$off 方法。

核心机制

Vue 实例内部维护了一个事件中心(Event Hub),通过 _events 私有属性存储事件监听器。当调用 $on 时,会将回调函数注册到对应事件名的数组中;$emit 触发时遍历执行该事件的所有回调;$off 用于移除监听。

vue bus实现原理

实现代码示例

创建一个全局 Event Bus:

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

组件中使用方式:

vue bus实现原理

// 发送事件
EventBus.$emit('event-name', payload)

// 接收事件
EventBus.$on('event-name', (payload) => {
  console.log(payload)
})

// 移除监听
EventBus.$off('event-name')

底层实现分析

Vue 源码中相关方法的核心逻辑:

// $on 实现
Vue.prototype.$on = function (event, fn) {
  const vm = this
  ;(vm._events[event] || (vm._events[event] = [])).push(fn)
  return vm
}

// $emit 实现
Vue.prototype.$emit = function (event) {
  const vm = this
  let cbs = vm._events[event]
  if (cbs) {
    const args = Array.from(arguments).slice(1)
    for (let i = 0; i < cbs.length; i++) {
      cbs[i].apply(vm, args)
    }
  }
  return vm
}

注意事项

Event Bus 适合中小型项目,但在大型项目中可能导致事件难以追踪。需注意及时移除监听避免内存泄漏,通常在组件 beforeDestroy 钩子中调用 $off

Vue 3 中因移除 $on 等 API,推荐使用 mitt 等第三方库实现类似功能。

标签: 原理vue
分享给朋友:

相关文章

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue实现曲线

vue实现曲线

Vue 实现曲线的方法 在 Vue 中实现曲线可以通过多种方式,包括使用 SVG、Canvas 或第三方库如 D3.js、ECharts 等。以下是几种常见的方法: 使用 SVG 绘制曲线 SVG…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <labe…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…