当前位置:首页 > VUE

vue实现发布订阅模式

2026-02-23 01:54:19VUE

发布订阅模式简介

发布订阅模式(Pub/Sub)是一种消息通信范式,发布者(Publisher)不直接发送消息给订阅者(Subscriber),而是通过事件中心(Event Channel)进行中转。Vue 本身通过 $emit$on 提供了简单的实现,但可以进一步扩展为更通用的方案。

基于 Vue 的简单实现

Vue 实例本身可作为事件中心,利用 $emit$on 实现基础的发布订阅:

// 创建事件中心
const eventBus = new Vue();

// 订阅事件
eventBus.$on('event-name', (payload) => {
  console.log('收到消息:', payload);
});

// 发布事件
eventBus.$emit('event-name', { data: 'test' });

独立事件中心类

若需脱离 Vue 实例,可封装一个独立的 EventBus 类:

class EventBus {
  constructor() {
    this.events = {};
  }

  // 订阅
  on(event, callback) {
    if (!this.events[event]) {
      this.events[event] = [];
    }
    this.events[event].push(callback);
  }

  // 发布
  emit(event, ...args) {
    const callbacks = this.events[event];
    if (callbacks) {
      callbacks.forEach(cb => cb(...args));
    }
  }

  // 取消订阅
  off(event, callback) {
    const callbacks = this.events[event];
    if (callbacks) {
      this.events[event] = callbacks.filter(cb => cb !== callback);
    }
  }
}

// 使用示例
const bus = new EventBus();
bus.on('update', data => console.log(data));
bus.emit('update', '新数据');

结合 Vue 的 provide/inject

在 Vue 应用中,可通过 provideinject 共享事件总线:

vue实现发布订阅模式

// 父组件提供事件总线
const EventBus = new Vue();
export default {
  provide() {
    return { eventBus: EventBus };
  }
};

// 子组件注入并使用
export default {
  inject: ['eventBus'],
  mounted() {
    this.eventBus.$on('event', this.handleEvent);
  },
  methods: {
    handleEvent(payload) { /* ... */ }
  }
};

注意事项

  • 内存泄漏:组件销毁时需通过 $off 清理订阅。
  • 命名冲突:事件名建议使用命名空间(如 user:updated)。
  • 性能:高频事件需考虑防抖或节流。

替代方案

  • Vuex:适合全局状态管理,但复杂度较高。
  • 第三方库:如 mitttiny-emitter,提供更轻量的实现。

标签: 模式vue
分享给朋友:

相关文章

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现toggle

vue实现toggle

Vue 实现 Toggle 功能 在 Vue 中实现 toggle(切换)功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 和 v-on 通过 v-model 绑定数据,结合…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…