中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue通信方式EventBus的實現代碼詳解

發布時間:2020-08-29 14:50:43 來源:腳本之家 閱讀:533 作者:慕斯不想說話 欄目:web開發

vue通信方式有很多,項目中用的比較多的的有 pros、vuex、$emit/$on 這3種,還有 provide/inject (適合高階組件)、 $attrs$listeners (適合高階組件)以及 $parent/$child/refeventBus 等這3種方式。很多時候我們都是只會使用api,而懂得原理以及實現,但我就覺得懂得原理以及實現跟一個只會調用api的開發人員時不在同一層次的。所以這里就像把跨組件通信的 eventBus 通信的原理給大家展示一下。這也是自己學到大佬的的東西后并在此記錄(轉載)一下。

class EventBus{
    constructor(){
      this.event=Object.create(null);
    };
    //注冊事件
    on(name,fn){
      if(!this.event[name]){
        //一個事件可能有多個監聽者
        this.event[name]=[];
      };
      this.event[name].push(fn);
    };
    //觸發事件
    emit(name,...args){
      //給回調函數傳參
      this.event[name]&&this.event[name].forEach(fn => {
        fn(...args)
      });
    };
    //只被觸發一次的事件
    once(name,fn){
      //在這里同時完成了對該事件的注冊、對該事件的觸發,并在最后并取消該事件。
      const cb=(...args)=>{
        //觸發
        fn.apply(this,args);
        //取消
        this.off(name,fn);
      };
      //監聽
      this.on(name,cb);
    };
    //取消事件
    off(name,offcb){
      if(this.event[name]){
        let index=this.event[name].findIndex((fn)=>{
          return offcb===fn;
        })
        this.event[name].splice(index,1);
        if(!this.event[name].length){
          delete this.event[name];
        }
      }
    }
  }

以上代碼用的是發布訂閱模式。

總結

以上所述是小編給大家介紹的vue通信方式EventBus的實現代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鱼台县| 平阳县| 芮城县| 新疆| 望江县| 太湖县| 杭州市| 威宁| 开江县| 漯河市| 朝阳县| 梅州市| 新巴尔虎左旗| 嘉兴市| 都江堰市| 杭锦后旗| 德昌县| 峨边| 嘉善县| 贵阳市| 和政县| 张北县| 保康县| 梁河县| 和平区| 普陀区| 垦利县| 若尔盖县| 永善县| 贡觉县| 嘉义市| 贵南县| 青龙| 台山市| 凤台县| 辽中县| 杂多县| 炎陵县| 门源| 克拉玛依市| 乡宁县|