1. 程式人生 > >vue中eventbus被多次觸發(vue中使用eventbus踩過的坑)【bus.$on事件被多次繫結】

vue中eventbus被多次觸發(vue中使用eventbus踩過的坑)【bus.$on事件被多次繫結】

 

問題描述:只要頁面沒有強制重新整理,存在元件切換,bus.$on方法會被多次繫結,造成事件多次觸發

  觸發bus.$on中繫結的方法.png   bus.$on多次繫結.png

解決辦法:在每次呼叫方法前先解綁事件( bus.$off ),然後在重新繫結( bus.$on )

 bus.$off("backUpLevel");
        bus.$on('backUpLevel', () => {
            if(self.ONION.length <= 1){ self.jumpSubDir() }else{ let len = self.ONION.length-1 self.jumpTeamId(self.ONION[len].id,self.ONION[len].name,self.ONION[len].type) } }) 
  每次繫結前解綁bus.$on方法.png

解決:
看一下github上提出的。issue
https://github.com/vuejs/vue/issues/3399

  image.png

尤大大提出了以下解決:

  image.png

*就是說,這個$on事件是不會自動清楚銷燬的,需要我們手動來銷燬。

(不過我不太清楚這裡的external bus 是什麼意思,有大神能解答一下的嗎,尤大大也提到如果是註冊的是external bus 的時候需要清除)****

所以。我在B元件頁面中新增Bus.$off來關閉。程式碼如下:

// 在B元件頁面中新增以下語句,在元件beforeDestory的時候銷燬。
  beforeDestroy () {
    bus.$off('get', this.myhandle)
  },