中央事件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')
},
相关推荐
怒放的生命199130 分钟前
pnpm + Monorepo 使用教程(集成 Vue 3 项目)
前端·vue.js·pnpm·monorepo·前端工程化
佛系打工仔5 小时前
绘制K线第二章:背景网格绘制
android·前端·架构
明天好,会的7 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
C_心欲无痕8 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
我是苏苏10 小时前
Web开发:C#通过ProcessStartInfo动态调用执行Python脚本
java·服务器·前端
无羡仙10 小时前
Vue插槽
前端·vue.js
用户63879947730511 小时前
每组件(Per-Component)与集中式(Centralized)i18n
前端·javascript
SsunmdayKT11 小时前
React + Ts eslint配置
前端
开始学java11 小时前
useEffect 空依赖 + 定时器 = 闭包陷阱?count 永远停在 1 的坑我踩透了
前端