中央事件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')
},
相关推荐
学不会•43 分钟前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
活宝小娜3 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点3 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow3 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o3 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā4 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
沉默璇年5 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder6 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
2401_882727576 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架