封装观察者模式$on(),$emit(),$off()。

let eventList = {};


const $on=(eventName,cb)=>{

    if(!eventList[eventName]){
        eventList[eventName] = [];
    }
    eventList[eventName].push(cb)
}




const $emit = (eventName,params)=>{

    if(eventList[eventName]){
        let arr = eventList[eventName];
        arr.map((cb)=>{
            cb(params)
        })
    }
}


const $off = (eventName,cb)=>{
    if(eventList[eventName]){
        if(cb){
            let index = eventList[eventName].indexOf(cb);
            eventList[eventName].splice(index,1);

        }else{
            eventList[eventName].length = 0;
            
        }
    }
}

使用的时候把需要的部分导出即可。可以用于vue中的非父子组件之间的传值。

原文地址:https://www.cnblogs.com/PrayLs/p/10422193.html