自定义事件总线

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{
        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","哈哈哈哈");

你可能感兴趣的:(自定义事件总线)