当前位置:首页 > 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 实现评论功能的方法 基础评论组件结构 使用 Vue 单文件组件(SFC)构建评论功能的核心结构。模板部分包含评论输入框和评论列表,脚本部分处理数据绑定和逻辑。 <template>…

vue卖座网实现

vue卖座网实现

Vue 卖座网实现 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 Vue Router、Vuex、Axios。 创建核心目录结构:components(通用组件)、views(页…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用X…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…