自定义事件总线

简介: 自定义事件总线

1.自定义事件总线

  • 自定义事件总线属于一种观察者模式,其中包括三个角色:
    • 发布者(Publisher):发出事件(Event)
    • 订阅者(Subscriber):订阅事件(Event)、并且会进行响应(Handler)
    • 事件总线(EventBus):无论是发布者还是订阅者都是通过事件总线作为中台的。
  • 当然我们可以选择一些第三方的库

    • Vue2默认是带有事件总线的功能
    • Vue3中推荐一些第三方库,比如mitt
  • 当然我们也可以实现自己的事件总线

    • 事件的监听方法on
    • 事件的发射方法emit
    • 事件的取消监听off
class JYEventBus{
   
  constructor(){
   
    this.eventBus={
   }
  }

  // * 监听,可以监听对次
  on(eventName,eventCallback,thisArg){
   
    let handlers=this.eventBus[eventName];
    if(!handlers){
   
      handlers=[];
      this.eventBus[eventName]=handlers;
    }
    handlers.push({
   
      thisArg,
      eventCallback
    });
  }

  off(eventName,eventCallback){
   
    let handlers=this.eventBus[eventName];
    if(!handlers) return;
    const newHandlers=[...handlers];
    for(let i=0;i<newHandlers.length;i++){
   
      const handler=newHandlers[i];
      if(handler.eventCallback==eventCallback){
   
        const index=handlers.indexOf(handler);
        handlers.splice(index,1)
      }
    }
  }

  emit(eventName,...payload){
   
    const handlers=this.eventBus[eventName];
     if(handlers){
   
       handlers.forEach(handler=>{
   
        handler.eventCallback.apply(handler.thisArg,payload);
       })
     }
  }
}

const eventBus=new JYEventBus();

// main.js
eventBus.on("abc",function(v){
   
 console.log("监听1vvv",v,this);
},{
   name:"why"})

// main.js
const handleCallback=function(v){
   
  console.log("监听2vvv",v,this);
 }
eventBus.on("abc",handleCallback,{
   name:"why"})
// utils.js
eventBus.emit("abc",123);

eventBus.off("abc",handleCallback)

eventBus.emit("abc","哈哈哈哈");
相关文章
|
4月前
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
30 2
中间件事件总线事件定义
|
4月前
|
消息中间件 中间件 Kafka
中间件事件总线路由与分发
【6月更文挑战第20天】
30 1
中间件事件总线路由与分发
|
4月前
|
消息中间件 设计模式 中间件
中间件事件总线发布与订阅
【6月更文挑战第20天】
35 4
|
4月前
|
消息中间件 监控 中间件
中间件事件总线实现机制
【6月更文挑战第21天】
34 1
|
5月前
|
Linux
统一事件源
统一事件源
59 0
|
11月前
|
JSON 数据格式
EventBridge事件领域
EventBridge事件领域
54 0
|
消息中间件 机器人 Serverless
|
消息中间件 机器学习/深度学习 Kubernetes
EventBridge 事件总线及 EDA 架构解析
EventBridge 是事件驱动的具体落地产品,也是 EDA 的最佳实践方式。
401 0
EventBridge 事件总线及 EDA  架构解析
|
API 调度
阿里云事件总线 EventBridge 最佳实践
本文介绍如何把阿里云事件总线 EventBridge 的内容接入观测云平台,通过观测云强大的统一汇聚能力轻松获取阿里云事件,实时追踪最新的数据信息。
234 0
|
JavaScript
【Vue组件间通信】 全局事件总线、订阅与发布
本章学习全局事件总线、订阅与发布。
146 0
【Vue组件间通信】 全局事件总线、订阅与发布
下一篇
无影云桌面