1. 程式人生 > >關於 Vue 中 我對中央事線管理器(enentBus)的誤解

關於 Vue 中 我對中央事線管理器(enentBus)的誤解

由於這段時間公司比較閒,就對vue 中的一些模糊的點做了一些加強,突然就想到了常掛在嘴邊兄弟元件傳值

我理解的兄弟元件的傳值是可以路由由傳值的,比如我從http://localhost:8080/login 裡面的值可以傳遞到 http://localhost:8080/home 這個頁面的

於是我是www.baidu.com 了一番,沒錯,跟我想象一樣的,可以進行頁面傳值, 於是呼我就跟著百度一番操作

 

像這樣:

 

 於是我建了一個 bus.js 

import Vue from 'vue'
export const EventBus = new Vue()

 

像這樣:

於是我在我的 login.vue 裡面綁定了一個 $emit

import { EventBus } from '../../bus'
    clickLgin() {
      console.log(EventBus)
      EventBus.$emit('add', '123456789')
    }

  

像這樣:

 

 於是我在我的home.vue 新增 $on 

  

import { EventBus } from '../../bus'
  
created() { EventBus.$on('add', target => { console.log(target, '222') }) }

  

  到這兒該結束了,可以愉快的拿到 login.vue 頁面傳遞過來的 222 了吧, 嘿,不行,空的,不列印

  後來幾經周折,我發現,當我 第一次從login 頁面進入 home 頁面,$on 是沒有觸發的, 我從home 頁面退到 login頁面,再從 login 進入home 頁面,也就是 第二次進入home 時,能傳遞值了,這就是神奇的地方

  我不知道這些博主在寫 東西時有沒有自己實踐,如果你們實踐了能傳遞,那是我菜不會用,如果沒有,我只想說害人

總結:

  eventBus 是給兄弟元件傳值的,不是給模組傳值的,當從A頁面進入另B頁面時, B頁面時沒有例項化的,也就是說 $on 監聽是不存在的,兄弟元件也是不存在的, 當B頁面例項化之後,$on 他才開始監聽,可是這時候並沒有監聽到自定義事件,所有是空值, 當我們再次退回A頁面時,由於瀏覽器快取機制,B頁面的程式碼得以快取,監聽依舊存在,我們在A 頁面自定義事件後,回到B 頁面,也就監聽到了 A頁面的自定事件,所以得到值

 

ps: 如果對我此次總結的問題有所異議,請您先實踐,如果是可以傳值的,請聯絡我,將程式碼發給我,我驗證沒問題會刪除部落格,如果有需要還會為我的無知