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)
}
}
}
相關文章
- Android訊息傳遞之元件間傳遞訊息Android元件
- Flutter中訊息傳遞Flutter
- Chrome Extension 訊息傳遞Chrome
- flutter 訊息傳遞機制Flutter
- Handler訊息傳遞機制
- Apache Kafka訊息傳遞策略ApacheKafka
- C#視窗間傳遞訊息C#
- Android訊息傳遞之Handler訊息機制Android
- 【轉】使用oracle pipe傳遞訊息Oracle
- QNX學習 -- API之訊息傳遞API
- Spring Boot 參考指南(訊息傳遞)Spring Boot
- Aeron訊息傳遞客戶端--Go版客戶端Go
- Java中用Aeron實現UDP訊息傳遞JavaUDP
- InheritableThreadLocal 線上程池中進行父子執行緒間訊息傳遞出現訊息丟失的解析thread執行緒
- Android Handler訊息傳遞機制詳解Android
- objc系列譯文(7.4):訊息傳遞機制OBJ
- Pulsar 入門實戰(1)--Pulsar 訊息傳遞
- 在ASP.NET Core 中使用 .NET Aspire 訊息傳遞元件ASP.NET元件
- Android之Handler訊息傳遞機制詳解Android
- RabbitMQ 和訊息傳遞常用一些術語MQ
- NATS訊息傳遞與REST效能比較 | VinsguruREST
- 基於WebSocket的實時訊息傳遞設計Web
- Android訊息傳遞之EventBus 3.0使用詳解Android
- uc/os-iii學習筆記-訊息傳遞筆記
- 深度解析VC中的訊息傳遞機制(上)
- 深度解析VC中的訊息傳遞機制(下)
- 新增的WebSphere MQ訊息傳遞提供程式簡介WebMQ
- .NET 8 中利用 MediatR 實現高效訊息傳遞
- OC isa結構、訊息傳遞、Method Swizzling
- 執行緒通訊機制:共享記憶體 VS 訊息傳遞執行緒記憶體
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- WebSphere MQ 訊息在傳遞和排隊期間的格式變化WebMQ
- 兄弟元件之間資訊傳遞元件
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- android 訊息傳遞機制進階EventBus的深入探究Android
- Android Handler訊息傳遞機制:圖文解析工作原理Android
- 跨共識訊息格式XCM有幾種傳遞機制?
- Laravel集合探學系列——高階訊息傳遞實現(二)Laravel