中央事件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')
},
相关推荐
正在学习前端的---小方同学39 分钟前
vue-easy-tree树状结构
前端·javascript·vue.js
键盘不能没有CV键4 小时前
【图片处理】✈️HTML转图片字体异常处理
前端·javascript·html
yantuguiguziPGJ5 小时前
WPF 联合 Web 开发调试流程梳理(基于 Microsoft.Web.WebView2)
前端·microsoft·wpf
大飞记Python5 小时前
部门管理|“编辑部门”功能实现(Django5零基础Web平台)
前端·数据库·python·django
tsumikistep6 小时前
【前端】前端运行环境的结构
前端
你的人类朋友6 小时前
【Node】认识multer库
前端·javascript·后端
Aitter6 小时前
PDF和Word文件转换为Markdown的技术实现
前端·ai编程
mapbar_front7 小时前
面试问题—上家公司的离职原因
前端·面试
昔人'7 小时前
css使用 :where() 来简化大型 CSS 选择器列表
前端·css
昔人'8 小时前
css `dorp-shadow`
前端·css