当前位置:首页 > VUE

vue发布订阅的实现

2026-02-23 09:48:08VUE

实现发布订阅模式

在Vue中可以通过EventBusVue.prototype全局事件总线来实现发布订阅模式。这种方式适合非父子组件间的通信。

创建事件总线:

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

订阅事件

组件中订阅自定义事件:

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

export default {
  created() {
    EventBus.$on('custom-event', (payload) => {
      console.log('收到事件:', payload)
    })
  }
}

发布事件

触发自定义事件并传递数据:

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

export default {
  methods: {
    triggerEvent() {
      EventBus.$emit('custom-event', { data: '测试数据' })
    }
  }
}

取消订阅

组件销毁时建议移除事件监听:

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

export default {
  beforeDestroy() {
    EventBus.$off('custom-event')
  }
}

替代方案

对于Vue 2.x还可以使用:

// main.js
Vue.prototype.$eventBus = new Vue()

// 组件中使用
this.$eventBus.$emit('event')
this.$eventBus.$on('event', handler)

对于Vue 3.x推荐使用mitt等第三方库:

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

// 发布
emitter.emit('event', data)

// 订阅
emitter.on('event', (data) => {
  console.log(data)
})

vue发布订阅的实现

标签: vue
分享给朋友:

相关文章

vue广告实现

vue广告实现

Vue 广告实现方法 在 Vue 项目中实现广告功能可以通过多种方式完成,具体取决于广告类型和需求。以下是几种常见的实现方法: 使用第三方广告平台 许多广告平台如 Google AdSense…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项目…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :messag…