vue2使用eventbus踩坑解決
前言
vue組件非常常見的有父子組件通信,兄弟組件通信。而父子組件通信就很簡單,父組件會通過 props 向下傳數(shù)據(jù)給子組件,當子組件有事情要告訴父組件時會通過 $emit 事件告訴父組件。
而兩個毫不相關的界面通訊我們又可以用到vuex和今天要說的eventbus,本文就對eventbus使用時遇到的問題以及怎么處理做說明,至于怎么使用就不過多贅述了。
問題1:
頁面A使用emit為什么第一次進入B的時候頁面B中的on事件沒有被觸發(fā)
這就涉及到vue的生命周期問題了,如果A的emit方法寫在了跳轉方法里這時候B界面其實還沒有創(chuàng)建,這時候通知是觸發(fā)不了B的on事件。
至于怎么解決問題,其實看下面的圖片大家就清楚了。
所以,我們可以把A頁面組件中的emit事件寫在beforeDestory中去。
因為這個時候,B頁面組件已經(jīng)被created了,也就是我們寫的on事件已經(jīng)觸發(fā)了。
所以可以,在beforeDestory的時候,emit事件。
A界面
// 跳轉界面的方法 editList (index, date, item) { // 點擊進入編輯的頁面,需要傳遞的參數(shù)比較多。 this.$router.replace({path: '/B'}) } // bus通知的方法 beforeDestroy () { bus.$emit('get', { name:'A'}) }
B界面
// bus通知的方法 create() { bus.$on('get', (data)=>{ }) }
這個問題就解決了
問題2:
為什么后面再一次依次去觸發(fā)的時候會出現(xiàn),每一次都會發(fā)現(xiàn)好像之前的on事件分發(fā)都沒有被撤銷一樣,導致每一次的事件觸發(fā)執(zhí)行越來越多。
這就是因為bus的on事件是不會自動清楚銷毀的,需要我們手動來銷毀。
// 在B組件頁面中添加以下語句,在組件beforeDestory的時候銷毀。 beforeDestroy () { bus.$off('get', ()=>{}) }
以上就是vue2使用eventbus踩坑解決的詳細內(nèi)容,更多關于vue2 eventbus踩坑的資料請關注腳本之家其它相關文章!
相關文章
ant design vue動態(tài)循環(huán)生成表單以及自定義校驗規(guī)則詳解
這篇文章主要介紹了ant design vue動態(tài)循環(huán)生成表單以及自定義校驗規(guī)則詳解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01解決VUEX刷新的時候出現(xiàn)數(shù)據(jù)消失
這篇文章主要介紹了解決VUEX刷新的時候出現(xiàn)數(shù)據(jù)消失,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07VUE 實現(xiàn)動態(tài)給對象增加屬性,并觸發(fā)視圖更新操作示例
這篇文章主要介紹了VUE 實現(xiàn)動態(tài)給對象增加屬性,并觸發(fā)視圖更新操作,涉及vue.js對象屬性動態(tài)操作及視圖更新相關實現(xiàn)技巧,需要的朋友可以參考下2019-11-11