**eventBus中央通信,會觸發多次的原因**
原因
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)
}
- 因爲***B頁面off來關閉,銷燬後就不存在執行多次的情況***了 。代碼如下:
1 // 在B組件頁面中添加以下語句,在組件beforeDestory的時候銷燬。
beforeDestroy () {
this.root.eventBus.$off('child-message')
},
總結
- 就是另一個接收的組件沒有銷燬$on事件造成的。