通常我们在组件之间的通信的时候常常会使用到eventbus解决同胞组件之间的传值,但是一直都搞不懂eventBus的实现原理,今天我就给大家分享一下eventBus底层的原理,不对的地方希望大家多多指点。
我们使用class类的形式来实现EventBus的原理:
class myEvnetBus{
constructor(){
this.wrap= {}//给一个容器,去放置我们的事件
}
//订阅
$on(eventName, cb){//eventName为事件的名字。cb为回调函数
if(!this.wraps[eventName]){//判断我们定义的盒子里面有没有对应的key值
this.wrap[eventName]=[]//如果没有的话,我们给我们的key值赋予一个数组来保存我们的回调
}
this.wrap[eventName].push(cb)
//派发
$emit(eventName,...arg){
if(!this.wrap[eventName]) return
this.wrap[eventName].forEach(cb=>(...arg))
//删除
$off(){
this.wrap[eventName]=[]
}
export default new myEvnetBus