<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.app {
display: flex;
}
.app div {
flex: 1;
}
</style>
</head>
<body>
<div id='app' class='app'>
<div>
<child-a></child-a>
</div>
<div>
<child-b></child-b>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
// 事件總線(xiàn),通過(guò)“訂閱-發(fā)布”模式實(shí)現(xiàn)組件之間的直接通信
1.首先創(chuàng)建一個(gè)空的vue實(shí)例
var bus = new Vue()
它身上有兩個(gè)方法實(shí)現(xiàn)組件之間的通信纤怒,bus.$emit(頻道档泽,數(shù)據(jù))定義 在組件的methods中悦析,用來(lái)向其他組件發(fā)送消息乓搬,bus.$on(頻道,數(shù)據(jù))用來(lái)接收其他組件發(fā)來(lái)的消息幔欧,定義在生命周期的created或者mounted鉤子函數(shù)中。
// bus.$emit('頻道') 發(fā)送消息
// bus.$on('頻道') 收到消息
當(dāng)兩個(gè)組件發(fā)送數(shù)據(jù)的頻道和接收消息的頻道相同就可以實(shí)現(xiàn)組件之間的雙向通信了
Vue.component('child-a', {
data: function() {
return {
msg: '',
html: ''
}
},
template:`
<div>
<input type="text" v-model='msg' @keyup.enter='send'>
<button @click='send'>發(fā)送</button>
//給輸入框和button按鈕都綁定send事件干厚,當(dāng)監(jiān)聽(tīng)到鍵盤(pán)enter事件或按鈕點(diǎn)擊事件李滴,執(zhí)行事件函數(shù)send
<div v-html='html'></div>
</div>
`,
methods: {
send() {
// 發(fā)送消息
bus.$emit('A', this.msg)
子組件a廣播了一件非定向消息,消息內(nèi)容為msg,msg就是輸入框中的內(nèi)容蛮瞄。廣播頻道為A所坯,
子組件b要接收這條消息,就要監(jiān)聽(tīng)廣播頻道A
this.msg = ''
}
},
created() {
var that = this
普通函數(shù)會(huì)改變this指向
bus.$on('B', function(msg) {
子組件a監(jiān)聽(tīng)頻道B的消息挂捅,并執(zhí)行回調(diào)函數(shù)芹助,將消息內(nèi)容渲染到div中
that.html += '<div>B說(shuō):'+msg+'</div>'
that指向組件實(shí)例,可以調(diào)用組件上的屬性和方法
})
}
})
Vue.component('child-b', {
data: function() {
return {
msg: '',
html: ''
}
},
template:`
<div>
<input type="text" v-model='msg' @keyup.enter='send'>
<button @click='send'>發(fā)送</button>
<div v-html='html'></div>
</div>
`,
methods: {
send() {
bus.$emit('B', this.msg)
this.msg = ''
}
},
created() {
var that = this
bus.$on('A', function(msg) {
//監(jiān)聽(tīng)的頻道,收到消息后的回調(diào)函數(shù)
that.html += '<div>A說(shuō):'+msg+'</div>'
})
}
})
var app = new Vue({
el: '#app'
})
</script>
</body>
</html>
vue-bus 事件總線(xiàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén)谤专,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)躁锡,“玉大人,你說(shuō)我怎么就攤上這事毒租≈上常” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵墅垮,是天一觀(guān)的道長(zhǎng)惕医。 經(jīng)常有香客問(wèn)我,道長(zhǎng)算色,這世上最難降的妖魔是什么抬伺? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮灾梦,結(jié)果婚禮上峡钓,老公的妹妹穿的比我還像新娘。我一直安慰自己若河,他們只是感情好能岩,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著萧福,像睡著了一般拉鹃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲫忍,一...
- 那天膏燕,我揣著相機(jī)與錄音,去河邊找鬼悟民。 笑死坝辫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的射亏。 我是一名探鬼主播近忙,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼竭业,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了银锻?” 一聲冷哼從身側(cè)響起永品,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎击纬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钾麸,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡更振,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饭尝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肯腕。...
- 正文 年R本政府宣布知态,位于F島的核電站,受9級(jí)特大地震影響立叛,放射性物質(zhì)發(fā)生泄漏负敏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一秘蛇、第九天 我趴在偏房一處隱蔽的房頂上張望其做。 院中可真熱鬧,春花似錦赁还、人聲如沸妖泄。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹈胡。三九已至,卻和暖如春柬焕,著一層夾襖步出監(jiān)牢的瞬間审残,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓富玷,卻偏偏與公主長(zhǎng)得像璧坟,于是被迫代替她去往敵國(guó)和親既穆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 這個(gè)插件可以在可以在所有的組件之間隨意使用 在main.js中使用插件: 使用vue-bus有兩點(diǎn)需要注意雀鹃,第一是...
- 需求 vue兄弟組件或者互不關(guān)聯(lián)的組件間的通訊 基本實(shí)現(xiàn)原理 使用bus總線(xiàn)eventbus來(lái)實(shí)現(xiàn)幻工,很簡(jiǎn)單 上代碼...
- 概覽 案例 事件發(fā)布前置條件IDL定義關(guān)鍵性配置發(fā)布任務(wù)服務(wù)實(shí)現(xiàn)事件發(fā)布 事件訂閱依賴(lài)作為訂閱者 既是事件發(fā)送者,...