觸發的時候頁面中的$on事件多次觸發

原因

1.第一次觸發的時候頁面中的on事件沒有被觸發

2. 爲什麼後面再一次依次去觸發的時候會出現,每一次都會發現好像之前的on事件分發都沒有被撤銷一樣,導致每一次的事件觸發執行越來越多

解答:

1. 當我們還在頁面A的時候,頁面B還沒生成,也就是頁面B中的 created中所監聽的來自於A中的事件還沒有被觸發。這個時候當你A中emit事件的時候,B其實是沒有監聽到的,

2. 當你從頁面A到頁面B跳轉的時候,發生了什麼?首先是先B組件先created然後beforeMount接着A組件才被銷燬,A組件才執行beforeDestory,以及destoryed

3. 所以,我們可以把A頁面組件中的emit事件寫在beforeDestory中去。因爲這個時候,B頁面組件已經被created了,也就是我們寫的$on事件已經觸發了

1.修改如下:在beforeDestory生命週期裏,$emit事件
 beforeDestroy () {
  this.$root.eventBus.$emit('child-message',this.data)
  }
  1. 因爲***B頁面onBBus.on事件是不會自動清楚銷燬的,需要我們手動來銷燬,所以我在B組件頁面中添加Bus.off來關閉,銷燬後就不存在執行多次的情況***了 。代碼如下:

1 // 在B組件頁面中添加以下語句,在組件beforeDestory的時候銷燬。

   beforeDestroy () {
    this.root.eventBus.$off('child-message')
   },

總結

  1. 就是另一個接收的組件沒有銷燬$on事件造成的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章