当前位置:首页 > VUE

vue实现发布订阅模式

2026-01-22 10:52:41VUE

发布订阅模式简介

发布订阅模式(Pub-Sub)是一种消息通信模式,发布者(Publisher)和订阅者(Subscriber)通过事件中心(Event Bus)解耦。Vue 本身基于观察者模式实现响应式系统,但可通过自定义事件机制模拟发布订阅模式。

vue实现发布订阅模式

基于 Vue 的自定义事件实现

Vue 实例提供 $on$emit$off 方法,可直接用于发布订阅逻辑。

vue实现发布订阅模式

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

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

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

// 取消订阅
eventBus.$off('event-name');

封装独立的 Event Bus 类

通过继承 Vue 或封装原生事件机制实现更独立的模块:

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

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

  emit(event, ...args) {
    if (this.events[event]) {
      this.events[event].forEach(cb => cb(...args));
    }
  }

  off(event, callback) {
    if (this.events[event]) {
      this.events[event] = this.events[event].filter(cb => cb !== callback);
    }
  }
}

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

在 Vue 组件中的应用

通过全局注入或按需引入 Event Bus:

// main.js 中全局挂载
Vue.prototype.$eventBus = new Vue();

// 组件内使用
export default {
  created() {
    this.$eventBus.$on('global-event', this.handleEvent);
  },
  methods: {
    handleEvent(payload) {
      console.log('全局事件触发:', payload);
    }
  },
  beforeDestroy() {
    this.$eventBus.$off('global-event');
  }
}

注意事项

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

替代方案

  • Vuex:适合复杂状态管理,内置事件系统。
  • 第三方库:如 mitt(轻量级 Event Bus)。
// mitt 示例
import mitt from 'mitt';
const emitter = mitt();
emitter.on('event', () => {});
emitter.emit('event');

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

相关文章

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue实现ide

vue实现ide

Vue 实现 IDE 的基本思路 使用 Vue 构建一个简易的集成开发环境(IDE)需要整合代码编辑器、文件管理、终端模拟等功能。以下是关键实现步骤和推荐工具。 核心功能模块 代码编辑器 使用…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…

vue最佳实现

vue最佳实现

Vue 最佳实践 组件设计 组件应遵循单一职责原则,每个组件只负责一个功能模块。命名采用 PascalCase(如 UserProfile.vue),模板中使用 kebab-case(如 <us…