当前位置:首页 > VUE

vue实现eventbus

2026-01-13 06:18:33VUE

Vue 2 中实现 EventBus

在 Vue 2 中,可以通过创建一个新的 Vue 实例作为事件总线来实现组件间的通信。这种方式适用于非父子组件或跨层级组件通信。

创建一个单独的 event-bus.js 文件:

import Vue from 'vue'
export const EventBus = new Vue()

在组件中使用:

// 发送事件
import { EventBus } from './event-bus.js'
EventBus.$emit('event-name', payload)

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

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

Vue 3 中实现 EventBus

Vue 3 移除了 $on$off 等方法,可以使用第三方库如 mitt 来实现类似功能。

vue实现eventbus

安装 mitt:

npm install mitt

创建事件总线:

vue实现eventbus

import mitt from 'mitt'
export const emitter = mitt()

在组件中使用:

// 发送事件
import { emitter } from './event-bus.js'
emitter.emit('event-name', payload)

// 接收事件
import { emitter } from './event-bus.js'
emitter.on('event-name', payload => {
  console.log(payload)
})

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

最佳实践

为避免内存泄漏,应在组件销毁时移除事件监听器。在 Vue 2 中:

created() {
  EventBus.$on('event-name', this.handleEvent)
},
beforeDestroy() {
  EventBus.$off('event-name', this.handleEvent)
}

在 Vue 3 中使用 onUnmounted

import { onUnmounted } from 'vue'

setup() {
  const handleEvent = (payload) => {
    console.log(payload)
  }

  emitter.on('event-name', handleEvent)
  onUnmounted(() => {
    emitter.off('event-name', handleEvent)
  })
}

注意事项

事件总线适合小型应用或简单场景,大型应用建议使用 Vuex 或 Pinia 进行状态管理。过度使用事件总线可能导致代码难以维护和调试。

标签: vueeventbus
分享给朋友:

相关文章

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起: &l…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…

vue 实现excel

vue 实现excel

Vue 实现 Excel 功能 前端导出 Excel 使用 xlsx 库可以轻松实现前端 Excel 导出功能。安装依赖: npm install xlsx 导出 Excel 示例代码: impo…