国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解Vue2.0 事件派發與接收

2024-05-06 15:11:51
字體:
來源:轉載
供稿:網友

由于vue2.0 移除了1.0中的$dispatch 和$broadcast 這兩個組件之間通信傳遞數據的方法 ,官方的給出的最簡單的升級建議是使用集中的事件處理器,而且也明確說明了 一個空的vue實例就可以做到,因為Vue 實例實現了一個事件分發接口.

請直接看代碼,在初始化web app的時候,給data添加一個 名字為eventhub 的空vue對象

new Vue({ el: '#app', router, render: h => h(App), data: {  eventHub: 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)=>{  handle(yourData)} )

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

跳轉路由之前我們調用了$emit方法,這個方法在A組件里面處理數據,但是A組件綁定$on事件之前 $emit事件已經發射,所以這會導致一直接受不到消息,看來這個事件綁定有時效性問題,你可以setTimeout來做一下延時,但是這個特別奇怪,那就把數據存到store然后等A組件加載完了再去取。。。。

官方文檔請點擊我

record on 12 24

在stackoverflow 發現一個更加簡潔的方法,因為本質上vue是一個js對象,我們想保存一個全局對象,只需要在Vue的prototype上面增加一個屬性即可,本質上所有Vue組件都是繼承全局的Vue。只要在初始化Vue對象之前給原生Vue對象prototype增加屬性,那樣所有的組件(因為都是繼承自它的實例)都可以訪問到這個屬性。相關資料請參考我之前的文章關于函數的構造函數和prototype<四>

在初始化Web app 之前 加上這樣一句:

Vue.prototype.$eventHub= Vue.prototype.$eventHub || new Vue()

當然我們可以定義其他的全局變量.比如當前app的系統配置文件,名字為sysconfig.json,你可以這樣定義

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: require('path/sysconfig.json')}); 

然后我們也可以在全局內使用CONFIG對象了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 加查县| 云南省| 马边| 道真| 龙游县| 沂源县| 景谷| 会同县| 宕昌县| 柯坪县| 乐东| 临邑县| 武定县| 白山市| 丰顺县| 探索| 琼中| 化德县| 乌拉特中旗| 南澳县| 怀宁县| 淳化县| 连云港市| 华阴市| 富源县| 祥云县| 勃利县| 鄂尔多斯市| 曲松县| 广河县| 澄城县| 泌阳县| 九龙县| 伊通| 大连市| 莱西市| 吴桥县| 洛隆县| 泽库县| 常宁市| 玉溪市|