中央事件bus

中央事件bus的使用

使用场景:当需要传递给多个组件的时候例如父组件->子组件->孙组件,甚至还得传递到更深的组件的时候中央事件就起到了作用,不需要一直传递。bus其实就是一个发布订阅模式,利用vue的自定义事件机制

javascript 复制代码
// 事件总线

class EventBus {
  // 事件总线类构造器
	constructor() {
		// 收集订阅信息,调度中心
		this.list = {};
	}

  /**
   * 订阅事件
   * @param {string} name - 事件名称
   * @param {function} callback - 事件回调函数
   */
	on(name, callback) {
		this.list[name] = this.list[name] || [];
		this.list[name].push(callback);
	}

  /**
   * 发布事件
   * @param {string} name - 事件名称
   * @param {any} data - 载荷(传入订阅时绑定的事件回调函数中的数据)
   */
	emit(name, data) {
		if (this.list[name]) {
      this.list[name].forEach((callback) => {
        callback(data);
      });
    }
	}

  /**
   * 取消订阅事件
   * @param {string} name - 事件名称
   */
	off(name) {
		if (this.list[name]) {
			delete this.list[name];
		}
	}
}
//export default EventBus;

// 实例化事件总线对象
const eventBus = new EventBus();

export default eventBus;

在需要的文件引入

例如 在A页面点击或者其他操作的时候通过触发发布事件把参数传到目的文件 B/C/D/E或者更多的文件

javascript 复制代码
// A文件页面
<el-button @click='handleClick'></el-button>
 import bus from './eventBus';
 handleClick() {
 bus.$emit('getBus', {text: '测试数据'})
 // 在B页面或者其他页面
 
  bus.$on("getBus", (val) => { 
      console.log('获取测试数据', val);
    });
 }
 // 在下次调用之前需要先取消订阅
 // 在这个钩子函数处理
 beforeDestroy() {
  bus.$off('getBus')
},
相关推荐
触底反弹1 分钟前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
耳东小鹿1 小时前
对象常用方法
前端
程序员海军1 小时前
一个 AI 应用开发程序员的一天,都在屏幕前忙些什么?
前端·后端·程序员
程序员黑豆1 小时前
鸿蒙应用开发:Stack堆叠组件实战——实现微信消息角标效果
前端·harmonyos
夏幻灵2 小时前
浏览器原理深度解析:从输入 URL 到页面展现的全流程剖析
前端
闲猫2 小时前
Agent工程实践:从WorkFlow到多Agent协作的落地笔记
java·服务器·前端
带娃的IT创业者2 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
happy_0x3f2 小时前
前端应用的离线暂停更新策略
开发语言·前端·php
你驴我3 小时前
WhatsApp 消息撤回与编辑的幂等性设计实践
java·服务器·前端·后端·python
新中地GIS开发老师4 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发