Vue2 0 事件發射與接收

2022-04-15 15:04:09 字數 1558 閱讀 1355

由於vue2.0 移除了1.0中的$dispatch 和$broadcast 這兩個元件之間通訊傳遞資料的方法 ,官方的給出的最簡單的公升級建議是使用集中的事件處理器,而且也明確說明了 乙個空的vue例項就可以做到,因為vue 例項實現了乙個事件分發介面.

new

vue(

})

好的 這個時候 你就可以一勞永逸了,在任何元件都可以呼叫事件發射 接受的方法了.

如何獲取到這個空的vue物件 eventhub呢.在元件裡面直接呼叫這個

某乙個元件內呼叫事件觸發

//通過this.$root.eventhub獲取此物件

//呼叫$emit 方法

this.$root.eventhub.$emit('your_event_name', yourdata)

另乙個元件內呼叫事件接受,當然在元件銷毀時接觸繫結,使用$off方法

this.$root.eventhub.$on

('your_event_name', (yourdata)=> )

遇到乙個問題 ,考慮特定場景:

跳轉路由之前我們呼叫了$emit方法,這個方法在a元件裡面處理資料,但是a元件繫結$on事件之前 $emit事件已經發射,所以這會導致一直接受不到訊息,看來這個事件繫結有時效性問題,你可以settimeout來做一下延時,但是這個特別奇怪,那就把資料存到store然後等a元件載入完了再去取。。。。

官方文件我

—-宇宙分割線—–

record on 12 24

在stackoverflow 發現乙個更加簡潔的方法,因為本質上vue是乙個js物件,我們想儲存乙個全域性物件,只需要在vue的prototype上面增加乙個屬性即可,本質上所有vue元件都是繼承全域性的vue。只要在初始化vue物件之前給原生vue物件prototype增加屬性,那樣所有的元件(因為都是繼承自它的例項)都可以訪問到這個屬性。相關資料請參考我之前的文章關於函式的建構函式和prototype《四》

vue.prototype.$eventhub= vue.prototype.$eventhub ||  new vue()
vue.prototype.$config =vue.prototype.$config||require('path/sysconfig.json')
這樣我們在元件內部 就可以直接呼叫$eventhub 和 $config物件了。

比如 在mounted函式裡面直接 console.log($config.yourkey)

—-宇宙分割線—–

record on 1.1.2017

剛才看到了webpack的外掛程式裡面有乙個defineplugin 它可以幫我們定義全域性的常量。

如何使用,很簡單但是更好,我們不用去修改vue物件:

new

webpack

.defineplugin();

然後我們也可以在全域性內使用config物件了。

vue2 0表單事件的繫結

template div id label for mytxt input text input id mytxt type text v model myvalue myvalue label div template lazy 在預設情況下,v model在每次input事件觸發後將輸入框的值與...

Vue 2 0學習筆記 事件匯流排

我們知道,在乙個vue專案中,我們會使用vuex去進行乙個狀態的管理或者資料的傳遞,除了vuex還有什麼方法可以進行資料的傳遞?eventbus 事件匯流排 主要是現實途徑是在要相互通訊的兄弟元件之中,都引入乙個新的vue例項,然後通過分別呼叫這個例項的事件觸發和監聽來實現通訊和引數傳遞。1 建立b...

vue2 0學習記錄

1 在main.js可註冊全域性元件,vue.components 元件名稱 元件名 import 元件名 from components 元件檔案 3 元件的標籤名不可與系統的html標籤重複 4 父元件向子元件傳值 父元件有乙個陣列 users 在父元件模板中的子元件標籤中接收 users us...