vue 組件之間事件觸發(fā)($emit)與event Bus($on)的用法說(shuō)明
組件之間事件觸發(fā)
之前使用組件,并不是很頻繁,是水平的問(wèn)題,目前工作中,公司大佬帶著我手寫(xiě)過(guò)一個(gè)組件,再此很感謝他的指導(dǎo)。目前簡(jiǎn)單的組件已經(jīng)有了自己的邏輯思維,正在從低級(jí)碼農(nóng)向中級(jí)碼農(nóng)蛻變。廢話(huà)不多說(shuō)。上圖看看組件情況。

新增按鈕組件:

操作按鈕組合組件:

此時(shí)有個(gè)需求就是,無(wú)論是哪個(gè)按鈕,如果改變了列表中的數(shù)據(jù),列表需要實(shí)時(shí)更新數(shù)據(jù)。
此時(shí)就需要用到組件間的事件觸發(fā)。
父子組件之間事件觸發(fā)可以使用$emit
$emit的使用方法如下:
在子組件中,寫(xiě)一個(gè)click點(diǎn)擊事件。比如:
cancelCU() {
this.dialogVisible = false;
this.$emit('closeAdd')
}
然后在父組件中子組件上,添加一個(gè) @closeAdd="closeAddClick",closeAddClick函數(shù)就是執(zhí)行了。
新增按鈕可以使用這種方式。但是操作按鈕組合中的組件,就屬于孫子組件了,孫子組件執(zhí)行click事件,列表數(shù)據(jù)需要刷新,此時(shí)通過(guò)孫子組件觸發(fā)父組件事件,父組件觸發(fā)爺爺組件,就比較麻煩了,此時(shí)可以通過(guò)event bus實(shí)現(xiàn)跨組件的事件觸發(fā)了。
具體使用方法如下:
第一步:
新建一個(gè)js文件,來(lái)創(chuàng)建出我們的eventBus,我們把它命名為bus.js
內(nèi)容如下:
import Vue from 'vue';
export default new Vue();
第二步:
在孫子組件和爺爺組件中,都需要引入這個(gè)bus.js
import Bus from 'common/js/bus.js';
孫子組件執(zhí)行方法如下:
addCart(event) {
//如果傳遞參數(shù)的話(huà),可以如下這樣寫(xiě)
Bus.$emit('getTarget', event.target);
//如果不傳遞參數(shù)可以如下;
Bus.$emit('getTarget');
}
這里我們?cè)赾lick組件中每次點(diǎn)擊,都會(huì)在bus中觸發(fā)這個(gè)名為'getTarget'的事件,并將點(diǎn)擊事件的event.target順著事件傳遞出去。
接著,我們要在show組件中的created()鉤子中調(diào)用bus監(jiān)聽(tīng)這個(gè)事件,并接收參數(shù):
created() {
//如果傳遞參數(shù)的話(huà),爺爺組件需要這樣接收
Bus.$on('getTarget', target => {
console.log(target);
});
//如果不傳遞參數(shù)的話(huà),則可以如下處理
Bus.$on('getTarget',()=>{
//此處執(zhí)行對(duì)應(yīng)的函數(shù)操作
})
}
這樣,在每次click組件的點(diǎn)擊事件中,就會(huì)把event.target傳遞到show中,并console出來(lái)。
所以eventBus的使用還是非常便捷的,但是如果是中大型項(xiàng)目,通信比較復(fù)雜,還是建議大家直接使用vuex。
補(bǔ)充知識(shí):vue 2 使用Bus.js進(jìn)行兄弟(非父子)組件通信 簡(jiǎn)單案例
vue2中廢棄了$dispatch和$broadcast廣播和分發(fā)事件的方法。父子組件中可以用props和$emit()。如何實(shí)現(xiàn)非父子組件間的通信,可以通過(guò)實(shí)例一個(gè)vue實(shí)例Bus作為媒介,要相互通信的兄弟組件之中,都引入Bus,之后通過(guò)分別調(diào)用Bus事件觸發(fā)和監(jiān)聽(tīng)來(lái)實(shí)現(xiàn)組件之間的通信和參數(shù)傳遞。
首先需要在任意地方添加一個(gè)bus.js

在bus.js里面 寫(xiě)入下面信息
import Vue from 'vue'
export default new Vue;

在需要通信的組件都引入Bus.js
如果你的bus.js是自定義一個(gè)bus的文件那from后面就改成你的所放的位置
import Bus from './bus.js'

接下來(lái)就是要組件通信了
添加一個(gè) 觸發(fā) #emit的事件按鈕
<template>
<div id="emit">
<button @click="bus">按鈕</button>
</div>
</template>
import Bus from './bus.js'
export default {
data() {
return {
message: ''"
}
},
methods: {
bus () {
Bus.$emit('msg', '我要傳給兄弟組件們,你收到?jīng)]有')
}
}
}
打開(kāi)要和$emit通信的另外一個(gè)組件 添加

在鉤子函數(shù)中監(jiān)聽(tīng)msg事件
<template>
<div id="on">
<p>{{message}}</p>
</div>
</template>
import Bus from './bus.js'
export default {
data() {
return {
message: ''
}
},
mounted() {
let self = this
Bus.$on('msg', (e) => {
self.message = e
console.log(`傳來(lái)的數(shù)據(jù)是:${e}`)
})
}
}
最后p會(huì)顯示來(lái)自$emit傳來(lái)的信息
以上這篇vue 組件之間事件觸發(fā)($emit)與event Bus($on)的用法說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)新聞?wù)故卷?yè)的步驟詳解
最近小編遇到這樣的需求,要實(shí)現(xiàn)一個(gè)新聞?wù)故卷?yè)功能,剛接到這樣的需求還真是一頭霧水,不知從哪入手,今天小編通過(guò)實(shí)例代碼給大家介紹下vue實(shí)現(xiàn)新聞?wù)故卷?yè)的步驟詳解,感興趣的朋友跟隨小編一起看看吧2019-04-04
vue中使用unity3D如何實(shí)現(xiàn)webGL將要呈現(xiàn)的效果
這篇文章主要介紹了vue中使用unity3D如何實(shí)現(xiàn)webGL將要呈現(xiàn)的效果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
vue2.0與vue3.0及vue與react的區(qū)別及說(shuō)明
這篇文章主要介紹了vue2.0與vue3.0及vue與react的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue electron前端開(kāi)啟局域網(wǎng)接口實(shí)現(xiàn)流程詳細(xì)介紹
用electron寫(xiě)了一個(gè)自己用的小軟件,無(wú)后端,純本地的數(shù)據(jù)。最近想著開(kāi)發(fā)一個(gè)手機(jī)端app,將PC端的數(shù)據(jù)進(jìn)行同步。為了這小小的功能單獨(dú)寫(xiě)個(gè)后端又麻煩。干脆前后端不分離哈哈,直接在前端軟件中開(kāi)啟接口2022-10-10
vue ajax 攔截原理與實(shí)現(xiàn)方法示例
這篇文章主要介紹了vue ajax 攔截原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js基于ajax攔截實(shí)現(xiàn)無(wú)刷新登錄的相關(guān)原理與操作技巧,需要的朋友可以參考下2019-11-11
Ant Design Vue table組件如何自定義分頁(yè)器
這篇文章主要介紹了Ant Design Vue table組件如何自定義分頁(yè)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
vue引入element-ui之后,頁(yè)面是空白的問(wèn)題及解決
這篇文章主要介紹了vue引入element-ui之后,頁(yè)面是空白的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
vue element-ui v-for循環(huán)el-upload上傳圖片 動(dòng)態(tài)添加、刪除方式
這篇文章主要介紹了vue element-ui v-for循環(huán)el-upload上傳圖片 動(dòng)態(tài)添加、刪除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10

