vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)
一. 簡述
有時候我們需要使用到元件間的傳遞訊息,來達到我們想要效果。比如以下場景,A下包含B1,B2,他們之間可以相互通訊。
二. 實現方法
上面那個圖包含兩中通訊方式,父子通訊,兄弟通訊。我們首先實現父子通訊,其次在實現兄弟通訊。
2.1 父子通訊
B1,B2元件定義props屬性,來接受父元件傳遞過來的值。B1,B2想要給A傳遞訊息,需要通過this.$emit函式來傳遞訊息。A元件需要處理來接受子元件this.$emit函式。
// A 檔案
<div>
<p>{{receiveMsgB1}}</p>
<p>{{receiveMsgB2}}</p>
<my-info :message="infoMessage" @sendInfo="receiveMessageB1"></my-info>
<my-list :message="listMessage" @sendInfo="receiveMessageB2"></my-list>
</div>
export default {
data:function(){
return {
infoMessage:'測試1',
listMessage:'測試2',
receiveMsgB1:'',
receiveMsgB2:''
}
},
methods:{
receiveMessageB1:function(val){
this.receiveMsgB1 = val
},
receiveMessageB2:function(val){
this.receiveMsgB2 = val
}
}
}
// B1 檔案,B2檔案實現方法類似
<div>
<p>{{message}}</p>
<input v-model="inputMessage"></input>
<button @click="sendMessage">傳遞訊息</button>
</div>
export default {
props:{
message:{
type:String,
default:''
}
},
data:function(){
return {
inputMessage:''
}
},
methods:{
sendMessage:function(){
this.$emit('sendInfo',this.inputMessage) //第一引數自定義事件,第二引數就是傳遞訊息
}
}
}
2.2 兄弟間通訊
實現思路有兩種方法:第一種藉助父元件A來傳遞訊息;第二種通過Vuex(狀態管理器)的store來傳遞訊息;第三種通過eventBus傳遞訊息
第一種方法:很簡單。
// A 檔案
<div>
<p>{{receiveMsgB1}}</p>
<p>{{receiveMsgB2}}</p>
<my-info :message="receiveMsgB2" @sendInfo="receiveMessageB1"></my-info>
<my-list :message="receiveMsgB1" @sendInfo="receiveMessageB2"></my-list>
</div>
export default {
data:function(){
return {
receiveMsgB1:'測試1',
receiveMsgB2:'測試2'
}
},
methods:{
receiveMessageB1:function(val){
this.receiveMsgB1 = val
},
receiveMessageB2:function(val){
this.receiveMsgB2 = val
}
}
}
第二種方法:需要配置vuex狀態管理器。
第三種方法:通過eventBus傳遞訊息
// main.js檔案
let bus = new Vue()
Vue.prototype.bus = bus
// B1 元件
<template>
<div>
<p>{{msg}}</p>
<input v-model="message"></input>
<button @click="sendMsg">向B2傳送訊息</button>
</div>
</template>
export default {
data:function(){
return {
msg:'',
message:'測試1'
}
},
mounted:function(){
this.bus.$on('toChangeMsgToB1',function(val){
this.msg = val
})
},
methods:{
sendMsg:function(){
this.bus.$emit('toChangeMsgB2',this.message)
}
}
}
// B2 檔案
<template>
<div>
<p>{{msg}}</p>
<input v-model="message"></input>
<button @click="sendMsg">向B2傳送訊息</button>
</div>
</template>
export default {
data:function(){
return {
msg:'',
message:'測試1'
}
},
mounted:function(){
this.bus.$on('toChangeMsgToB2',function(val){
this.msg = val
})
},
methods:{
sendMsg:function(){
this.bus.$emit('toChangeMsgToB1',this.message)
}
}
}
相關文章
- Flutter中訊息傳遞Flutter
- Chrome Extension 訊息傳遞Chrome
- flutter 訊息傳遞機制Flutter
- Handler訊息傳遞機制
- Apache Kafka訊息傳遞策略ApacheKafka
- 父子元件資訊傳遞元件
- 兄弟元件之間資訊傳遞元件
- Spring Boot 參考指南(訊息傳遞)Spring Boot
- QNX學習 -- API之訊息傳遞API
- Java中用Aeron實現UDP訊息傳遞JavaUDP
- InheritableThreadLocal 線上程池中進行父子執行緒間訊息傳遞出現訊息丟失的解析thread執行緒
- NATS訊息傳遞與REST效能比較 | VinsguruREST
- Android之Handler訊息傳遞機制詳解Android
- Pulsar 入門實戰(1)--Pulsar 訊息傳遞
- 在ASP.NET Core 中使用 .NET Aspire 訊息傳遞元件ASP.NET元件
- RabbitMQ 和訊息傳遞常用一些術語MQ
- .NET 8 中利用 MediatR 實現高效訊息傳遞
- 基於WebSocket的實時訊息傳遞設計Web
- Android Handler訊息傳遞機制:圖文解析工作原理Android
- android 訊息傳遞機制進階EventBus的深入探究Android
- CCF CSP201903-4訊息傳遞介面(c++100)C++
- Python程式專題8:分佈叢集的訊息傳遞Python
- Laravel集合探學系列——高階訊息傳遞實現(二)Laravel
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- 跨共識訊息格式XCM有幾種傳遞機制?
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- Rust 程式設計視訊教程(進階)——017_1 訊息傳遞 1Rust程式設計
- Rust 程式設計視訊教程(進階)——017_2 訊息傳遞 2Rust程式設計
- Rust 程式設計視訊教程(進階)——017_3 訊息傳遞 3Rust程式設計
- RabbitMQ 訊息的可靠投遞MQ
- BYOD時代,如何在企業中保護移動訊息傳遞?
- 訊息中介軟體—RocketMQ訊息傳送MQ
- 父子元件的資料傳遞元件
- 從事件驅動程式設計模型分析Handler訊息傳遞機制事件程式設計模型
- Rust 程式設計影片教程(進階)——017_1 訊息傳遞 1Rust程式設計
- Rust 程式設計影片教程(進階)——017_2 訊息傳遞 2Rust程式設計
- Rust 程式設計影片教程(進階)——017_3 訊息傳遞 3Rust程式設計
- Apache Kafka訊息傳遞精確正好一次的含義 | TechMyTalkApacheKafka