当前位置:首页 > 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 用于移除监听。

实现代码示例

创建一个全局 Event Bus:

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

组件中使用方式:

// 发送事件
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 bus实现原理

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

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

相关文章

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…

vue核心实现

vue核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现原理的详细说明: 响应式系统 Vue 使用 Object.defineProper…

vue实现拖拉

vue实现拖拉

实现拖拽功能的基本步骤 在Vue中实现拖拽功能可以通过原生HTML5的拖放API或第三方库如vuedraggable完成。以下是两种方法的详细说明。 使用HTML5原生拖放API HTML5提供了原…

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…