vue2使用eventbus踩坑解決
前言
vue組件非常常見(jiàn)的有父子組件通信,兄弟組件通信。而父子組件通信就很簡(jiǎn)單,父組件會(huì)通過(guò) props 向下傳數(shù)據(jù)給子組件,當(dāng)子組件有事情要告訴父組件時(shí)會(huì)通過(guò) $emit 事件告訴父組件。
而兩個(gè)毫不相關(guān)的界面通訊我們又可以用到vuex和今天要說(shuō)的eventbus,本文就對(duì)eventbus使用時(shí)遇到的問(wèn)題以及怎么處理做說(shuō)明,至于怎么使用就不過(guò)多贅述了。
問(wèn)題1:
頁(yè)面A使用emit為什么第一次進(jìn)入B的時(shí)候頁(yè)面B中的on事件沒(méi)有被觸發(fā)
這就涉及到vue的生命周期問(wèn)題了,如果A的emit方法寫(xiě)在了跳轉(zhuǎn)方法里這時(shí)候B界面其實(shí)還沒(méi)有創(chuàng)建,這時(shí)候通知是觸發(fā)不了B的on事件。
至于怎么解決問(wèn)題,其實(shí)看下面的圖片大家就清楚了。
所以,我們可以把A頁(yè)面組件中的emit事件寫(xiě)在beforeDestory中去。
因?yàn)檫@個(gè)時(shí)候,B頁(yè)面組件已經(jīng)被created了,也就是我們寫(xiě)的on事件已經(jīng)觸發(fā)了。
所以可以,在beforeDestory的時(shí)候,emit事件。
A界面
// 跳轉(zhuǎn)界面的方法 editList (index, date, item) { // 點(diǎn)擊進(jìn)入編輯的頁(yè)面,需要傳遞的參數(shù)比較多。 this.$router.replace({path: '/B'}) } // bus通知的方法 beforeDestroy () { bus.$emit('get', { name:'A'}) }
B界面
// bus通知的方法 create() { bus.$on('get', (data)=>{ }) }
這個(gè)問(wèn)題就解決了
問(wèn)題2:
為什么后面再一次依次去觸發(fā)的時(shí)候會(huì)出現(xiàn),每一次都會(huì)發(fā)現(xiàn)好像之前的on事件分發(fā)都沒(méi)有被撤銷(xiāo)一樣,導(dǎo)致每一次的事件觸發(fā)執(zhí)行越來(lái)越多。
這就是因?yàn)閎us的on事件是不會(huì)自動(dòng)清楚銷(xiāo)毀的,需要我們手動(dòng)來(lái)銷(xiāo)毀。
// 在B組件頁(yè)面中添加以下語(yǔ)句,在組件beforeDestory的時(shí)候銷(xiāo)毀。 beforeDestroy () { bus.$off('get', ()=>{}) }
以上就是vue2使用eventbus踩坑解決的詳細(xì)內(nèi)容,更多關(guān)于vue2 eventbus踩坑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ant design vue動(dòng)態(tài)循環(huán)生成表單以及自定義校驗(yàn)規(guī)則詳解
這篇文章主要介紹了ant design vue動(dòng)態(tài)循環(huán)生成表單以及自定義校驗(yàn)規(guī)則詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01解決VUEX刷新的時(shí)候出現(xiàn)數(shù)據(jù)消失
這篇文章主要介紹了解決VUEX刷新的時(shí)候出現(xiàn)數(shù)據(jù)消失,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07vue實(shí)現(xiàn)文章點(diǎn)贊和差評(píng)功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)文章點(diǎn)贊和差評(píng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Vue 實(shí)現(xiàn)從小到大的橫向滑動(dòng)效果詳解
這篇文章主要介紹了Vue 實(shí)現(xiàn)從小到大的橫向滑動(dòng)效果,結(jié)合實(shí)例形式詳細(xì)分析了vue.js橫向漸變滑動(dòng)效果的實(shí)現(xiàn)步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-10-10有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存
這篇文章主要介紹了有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存,在組件化開(kāi)發(fā)模式下,我們會(huì)把整個(gè)項(xiàng)目拆分成很多組件,然后按照合理的方式組織起來(lái),達(dá)到預(yù)期效果,下面來(lái)看看文章的詳細(xì)內(nèi)容2021-11-11vue mixins組件復(fù)用的幾種方式(小結(jié))
這篇文章主要介紹了vue mixins組件復(fù)用的幾種方式(小結(jié)),vue中提供了一種混合機(jī)制mixins,用來(lái)更高效的實(shí)現(xiàn)組件內(nèi)容的復(fù)用,有興趣的可以了解一下2017-09-09在vue中高德地圖引入和軌跡的繪制的實(shí)現(xiàn)
這篇文章主要介紹了在vue中高德地圖引入和軌跡的繪制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Vue源碼探究之虛擬節(jié)點(diǎn)的實(shí)現(xiàn)
這篇文章主要介紹了Vue源碼探究之虛擬節(jié)點(diǎn)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04VUE 實(shí)現(xiàn)動(dòng)態(tài)給對(duì)象增加屬性,并觸發(fā)視圖更新操作示例
這篇文章主要介紹了VUE 實(shí)現(xiàn)動(dòng)態(tài)給對(duì)象增加屬性,并觸發(fā)視圖更新操作,涉及vue.js對(duì)象屬性動(dòng)態(tài)操作及視圖更新相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-11-11