中央事件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')
},
相关推荐
手握风云-3 分钟前
JavaEE 进阶第四期:开启前端入门之旅(四)
前端
魔云连洲8 分钟前
React中的合成事件
前端·javascript·react.js
六月的可乐28 分钟前
【干货推荐】AI助理前端UI组件-悬浮球组件
前端·人工智能·ui
呼啦啦呼_33 分钟前
Echarts自定义地图显示区域,显示街道学校等区域,对原有区域拆分
前端
浩星42 分钟前
iframe引入界面有el-date-picker日期框,点击出现闪退问题处理
前端·vue.js·elementui
技术钱44 分钟前
element plus 多个form校验
前端
yume_sibai1 小时前
HTML HTML基础(3)
前端·html
米花丶1 小时前
JSBridge安全通信:iOS/Android桥对象差异与最佳实践
前端·webview
萌萌哒草头将军2 小时前
🚀🚀🚀 Oxc 恶意扩展警告;Rolldown 放弃 CJS 支持;Vite 发布两个漏洞补丁版本;Rslib v0.13 支持 ts-go
前端·javascript·vue.js
接着奏乐接着舞。2 小时前
3D地球可视化教程 - 第1篇:基础地球渲染系统
前端·javascript·vue.js·3d·three.js