vue2中eventbus遇到的坑

前言

vue組件非常常見的有父子組件通信,兄弟組件通信。而父子組件通信就很簡單,父組件會通過 props 向下傳數(shù)據(jù)給子組件,當子組件有事情要告訴父組件時會通過 $emit 事件告訴父組件。而兩個毫不相關的界面通訊我們又可以用到vuex和今天要說的eventbus,本文就對eventbus使用時遇到的問題以及怎么處理做說明,至于怎么使用就不過多贅述了。

問題1: 頁面A使用emit為什么第一次進入B的時候頁面B中的on事件沒有被觸發(fā)

??這就涉及到vue的生命周期問題了,如果A的emit方法寫在了跳轉(zhuǎn)方法里這時候B界面其實還沒有創(chuàng)建,這時候通知是觸發(fā)不了B的on事件。至于怎么解決問題,其實看下面的圖片大家就清楚了。


image.png

所以,我們可以把A頁面組件中的emit事件寫在beforeDestory中去。因為這個時候,B頁面組件已經(jīng)被created了,也就是我們寫的on事件已經(jīng)觸發(fā)了。
所以可以,在beforeDestory的時候,emit事件。

A界面

// 跳轉(zhuǎn)界面的方法
  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', ()=>{})
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一開始的需求是這樣子的,我為了實現(xiàn)兩個頁面組件之間的數(shù)據(jù)傳遞,假設我有頁面A,點擊頁面A上的某一個按鈕之后,頁面會...
    Katherine的小世界閱讀 67,033評論 38 112
  • 什么是Vue 是一套用于構(gòu)建用戶界面的漸進式 javascript 框架(漸進式:想用什么就用什么不必全都用) 在...
    王果果閱讀 5,244評論 0 14
  • 一、自定義組件 1、創(chuàng)建組件vue 2、父級引入組件并定義運用 3、一個組件的v-for在自定義組件里,你可以像任...
    BULL_DEBUG閱讀 1,510評論 0 0
  • 基礎部分 模版語法 1.computed和watch的區(qū)別 計算屬性computed :支持緩存,data數(shù)據(jù)不變...
    王蕾_fd49閱讀 679評論 0 0
  • 前端常見的一些問題 1.前端性能優(yōu)化手段? 1. 盡可能使用雪碧圖2. 使用字體圖標代替圖片3. 對HTML,cs...
    十八人言閱讀 1,267評論 0 1

友情鏈接更多精彩內(nèi)容