1.概念
EventBus是消息傳遞的一種方式奏篙,基于一個(gè)消息中心,訂閱和發(fā)布消息的模式迫淹,稱為發(fā)布訂閱者模式秘通。
- on('name', fn)訂閱消息,name:訂閱的消息名稱敛熬, fn: 訂閱的消息
- emit('name', args)發(fā)布消息, name:發(fā)布的消息名稱 肺稀, args:發(fā)布的消息
2.實(shí)現(xiàn)
class Bus {
constructor () {
this.callbacks = {}
}
$on(name,fn) {
this.callbacks[name] = this.callbacks[name] || []
this.callbacks[name].push(fn)
}
$emit(name,args) {
if(this.callbacks[name]){
//存在遍歷所有callback
this.callbacks[name].forEach(cb => cb(args))
}
}
}
2.使用
const EventBus = new EventBusClass()
EventBus.on('fn1', function(msg) {
alert(`訂閱的消息是:${msg}`);
});
EventBus.emit('fn1', '你好,世界应民!');
注:只不過在vue中已經(jīng)替我們實(shí)現(xiàn)好了$emit
,$on
這些方法盹靴,所以直接用的時(shí)候去 new Vue()
就可以了.