使用JavaScript手寫一個(gè)事件總線功能

事件總線

事件總線主要是實(shí)現(xiàn)一些任意的或非父子關(guān)系的組件之間的數(shù)據(jù)通信

實(shí)現(xiàn)一個(gè)事件總線功能需要:

  1. 事件派發(fā) $emit
  2. 監(jiān)聽 $on
  3. 回調(diào)管理
// Bus:事件派發(fā)、監(jiān)聽和回調(diào)管理
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]){
      this.callbacks[name].forEach(cb => cb(args))
    }
  }
}
// main.js
Vue.prototype.$bus = new Bus()
// child1:監(jiān)聽child2中的事件及傳值
this.$bus.$on('event-from-child2', msg => {
  console.log('Child1:', msg);
});
// child2:派發(fā)事件
this.$bus.$emit('event-from-child2', 'some msg from child2')

實(shí)踐中通常?Vue代替Bus,因?yàn)閂ue已經(jīng)實(shí)現(xiàn)了相應(yīng)接?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容