摘要:我的個人博客地址資源地址非父子組件傳值,事件總線的使用方式我的博客地址如果您對我的博客內容有疑惑或質疑的地方,請在下方評論區留言,或郵件給我,共同學習進步。
歡迎訪問我的個人博客:http://www.xiaolongwu.cn
前言先說一下什么是事件總線,其實就是訂閱發布者模式;
比如有一個bus對象,這個對象上有兩個方法,一個是on(監聽,也就是訂閱),一個是emit(觸發,也就是發布),我們通過on方法去監聽某個事件,再用emit去觸發這個事件,同時調用on中的回調函數,這樣就完成了一次事件觸發;
這是一種設計模式,和語言沒有關系;
如果不太了解什么是訂閱發布者模式,請移步看這篇文章JavaScript設計模式--觀察者模式(發布者-訂閱者模式)
在實際開發中,往往最麻煩的就是各種組件之間的傳值問題;如果利用事件總線就會讓這件事情變得很簡單;
vue自帶事件總線的短板我們都知道在vue被實例化之后,他就具備了充當事件總線對象的能力,在他上面掛了兩個方法,是$emit和$on;
而vue文檔說的很明白,$emit會觸發當前實例上的事件,附加參數都會傳給監聽器回調;
由于在實際工作中,我們都是以組件的形式開發,每個組件就是一個實例;
所以利用vue自帶的總線能力有很大的局限性,最多只能從子組件觸發到父組件中,而不能在非父子組件之間傳值;
所以這時,我們就需要有一個全局的事件總線對象,讓我們掛載監聽事件和觸發事件;
// 子組件中{{child}}
// 父組件實現全局事件總線對象的幾種方式 方式一,也是我自己使用的方式(推薦使用,簡單){{name}} // 在父組件中監聽 fromChild事件
大概思路是 :在main.js,也就是入口文件中,我們在vue的原型上添加一個bus對象;
具體實現方式如下:
//在mian.js中 Vue.prototype.bus = new Vue() //這樣我們就實現了全局的事件總線對象 //組件A中,監聽事件 this.bus.$on("updata", function(data) { console.log(data) //data就是觸發updata事件帶過來的數據 }) //組件B中,觸發事件 this.bus.$emit("updata", data) //data就是觸發updata事件要帶走的數據方式二,稍微有點麻煩,但也很容易理解
大概的實現思路: 新建一個bus.js文件, 在這個文件里實例化一下vue;然后在組件A和組件B中分別引入這個bus.js文件,將事件監聽和事件觸發都掛到bus.js這個實例上,這樣就可以實現全局的監聽與觸發了
// bus.js文件 import Vue from "vue" export default new Vue()
// 組件A ,監聽事件send{{name}}
// 組件B, 觸發事件send
這樣我們就完成了一個簡單非父子組件之間的傳值。
我的個人博客地址:http://www.xiaolongwu.cn
github資源地址:vue -- 非父子組件傳值,事件總線(eventbus)的使用方式
我的CSDN博客地址:https://blog.csdn.net/wxl1555
如果您對我的博客內容有疑惑或質疑的地方,請在下方評論區留言,或郵件給我,共同學習進步。
郵箱:wuxiaolong802@163.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100878.html
摘要:一父組件通過的方式向子組件傳遞數據,而通過子組件可以向父組件通信。而且只讀,不可被修改,所有修改都會失效并警告。 之前寫了一篇關于vue面試總結的文章, 有不少網友提出組件之間通信方式還有很多, 這篇文章便是專門總結組件之間通信的 vue是數據驅動視圖更新的框架, 所以對于vue來說組件間的數據通信非常重要,那么組件之間如何進行數據通信的呢?首先我們需要知道在vue中組件之間存在什么樣...
摘要:我在中寫了這段代碼在組件被創建時候將會執行此函數相當于進入頁面的自執行使用方法監聽屬性并執行一個回調函數按道理在元素被創建的時候,會將監聽到的值賦給并且打印。 天地不仁以萬物為芻狗,宇宙無義視眾生如螻蟻 ——蕭鼎和我 上一節列出了5個關鍵點,第一個路由已經解決了,接下來解決第二個問題: 組件的通信問題 一、組件的關系 組件之間的關系無非就是兩種父子關系...
摘要:同時有一種特殊的實現方案。組件之間傳值有這么幾種數據傳遞方式,和特殊的。在所有實例中使用其進行數據的通信。雙多方使用同名事件進行溝通。數據非長效數據,無法保存,只在后生效。這樣約定的好處是,我們能夠記錄所有中發生的改變。 前言 最近碰到了比較多的關于vue的eventBus的問題,之前定技術選型的時候也被問到了,vuex和eventBus的使用范圍。所以簡單的寫一下。同時有一種特殊的實...
摘要:組件之間的通訊分為三種父給子傳子給父傳兄弟組件之間的通訊父組件給子組件傳值子組件嵌套在父組件內部,父組件給子組件傳遞一個標識,在子組件內部用接收,子組件在模板里可以通過的形式進行使用。 組件之間的通訊分為三種 父給子傳 子給父傳 兄弟組件之間的通訊 1 父組件給子組件傳值 子組件嵌套在父組件內部,父組件給子組件傳遞一個標識,在子組件內部用props接收,子組件在模板里可以通過{{}}的...
摘要:組件之間的通訊分為三種父給子傳子給父傳兄弟組件之間的通訊父組件給子組件傳值子組件嵌套在父組件內部,父組件給子組件傳遞一個標識,在子組件內部用接收,子組件在模板里可以通過的形式進行使用。 組件之間的通訊分為三種 父給子傳 子給父傳 兄弟組件之間的通訊 1 父組件給子組件傳值 子組件嵌套在父組件內部,父組件給子組件傳遞一個標識,在子組件內部用props接收,子組件在模板里可以通過{{}}的...
閱讀 3420·2021-11-15 11:39
閱讀 1552·2021-09-22 10:02
閱讀 1309·2021-08-27 16:24
閱讀 3596·2019-08-30 15:52
閱讀 3412·2019-08-29 16:20
閱讀 824·2019-08-28 18:12
閱讀 550·2019-08-26 18:27
閱讀 716·2019-08-26 13:32