vue 兄弟組件的信息傳遞的方法實(shí)例詳解
前言
兄弟組件的信息傳遞有三種方式:
1.vuex 傳遞。
會(huì)將信息公有化。
此方法可在所有組件間傳遞數(shù)據(jù)。
2.建立Vue 實(shí)例模塊傳遞數(shù)據(jù)。
Vue 實(shí)例模塊會(huì)成為共用的事件觸發(fā)器。
其通過(guò)事件傳遞的信息不回被公有化。
3.建立事件鏈傳遞數(shù)據(jù)。
一個(gè)兄弟組件通過(guò)事件將信息傳給兄弟組件共有的父組件。
父組件再將信息通過(guò)屬性傳遞給另一個(gè)兄弟組件。
若兄弟組件不是親兄弟,而是堂兄弟,也就是他們有一個(gè)共同的爺爺,那么此方法會(huì)使程序變得繁瑣。
一,vuex 傳遞數(shù)據(jù)
1.安裝vuex
npm install vuex --save
2.store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export const store=new Vuex.Store({
state:{
msgFromA:'A 還沒(méi)說(shuō)話',
msgFromB:'B 還沒(méi)說(shuō)話'
},
getters:{
},
mutations:{
msgAChange(state,msg){
state.msgFromA=msg;
},
msgBChange(state,msg){
state.msgFromB=msg;
},
}
})
3.子組件A.vue
<template>
<div class="a">
<h3>A 模塊</h3>
<p>B 說(shuō):{{msgFromB}}</p>
<button @click="aSay">A 把自己的信息傳給B</button>
</div>
</template>
<script>
export default {
data () {
return {
msg:'我是A',
}
},
methods:{
aSay(){
this.$store.commit('msgAChange', this.msg);
}
},
computed: {
msgFromB() {
return this.$store.state.msgFromB;
}
}
}
</script>
4.子組件B.vue
<template>
<div class="b">
<h3>B 模塊</h3>
<p>A 說(shuō):{{msgFromA}}</p>
<button @click="bSay">B 把自己的信息傳給A</button>
</div>
</template>
<script>
export default {
data () {
return {
msg:'我是B'
}
},
methods:{
bSay(){
this.$store.commit('msgBChange', this.msg);
}
},
computed: {
msgFromA() {
return this.$store.state.msgFromA;
}
}
}
</script>
二,Vue 實(shí)例模塊傳遞數(shù)據(jù)
1.建立Vue 實(shí)例模塊 bus.js
import Vue from 'vue' export default new Vue();
2.子組件 A.vue
<template>
<div class="a">
<h3>A 模塊</h3>
<p>B 說(shuō):{{msgFromB}}</p>
<button @click="aSay">A 把自己的信息傳給B</button>
</div>
</template>
<script>
import Bus from '../util/Bus'
export default {
data () {
return {
msg:'我是A',
msgFromB:'B 還沒(méi)說(shuō)話',
}
},
created(){
let _this=this;
Bus.$on('msgBChange',function(dt){
_this.msgFromB=dt;
})
},
methods:{
aSay(){
Bus.$emit('msgAChange',this.msg);
}
}
}
</script>
3.子組件 B.vue
<template>
<div class="b">
<h3>B 模塊</h3>
<p>A 說(shuō):{{msgFromA}}</p>
<button @click="bSay">B 把自己的信息傳給A</button>
</div>
</template>
<script>
import Bus from '../util/Bus'
export default {
data () {
return {
msg:'我是B',
msgFromA:'A 還沒(méi)說(shuō)話'
}
},
created(){
let _this=this;
Bus.$on('msgAChange',function(dt){
_this.msgFromA=dt;
})
},
methods:{
bSay(){
Bus.$emit('msgBChange',this.msg);
}
}
}
</script>
三,事件鏈傳遞數(shù)據(jù)
1.父組件 C.vue
<template>
<div class="c">
<h3>事件鏈傳遞數(shù)據(jù)</h3>
<appA :msg-from-b="msgFromB" v-on:msg-a-change="aSay"></appA>
<appB :msg-from-a="msgFromA" v-on:msg-b-change="bSay"></appB>
</div>
</template>
<script>
import A from '../a3/A'
import B from '../b3/B'
export default {
data () {
return {
msgFromA:'A 還沒(méi)說(shuō)話',
msgFromB:'B 還沒(méi)說(shuō)話'
}
},
methods:{
aSay(msg){
this.msgFromA=msg;
},
bSay(msg){
this.msgFromB=msg;
},
},
components:{
appA:A,
appB:B,
}
}
</script>
2.子組件 A.vue
<template>
<div class="a">
<h3>A 模塊</h3>
<p>B 說(shuō):{{msgFromB}}</p>
<button @click="aSay">A 把自己的信息傳給B</button>
</div>
</template>
<script>
export default {
data () {
return {
msg:'我是A',
}
},
methods:{
aSay(){
this.$emit('msg-a-change', this.msg)
}
},
props: ['msgFromB'],
}
</script>
3.子組件 B.vue
<template>
<div class="b">
<h3>B 模塊</h3>
<p>A 說(shuō):{{msgFromA}}</p>
<button @click="bSay">B 把自己的信息傳給A</button>
</div>
</template>
<script>
import Bus from '../util/Bus'
export default {
data () {
return {
msg:'我是B',
}
},
methods:{
bSay(){
this.$emit('msg-b-change', this.msg)
}
},
props: ['msgFromA'],
}
</script>
總結(jié)
以上所述是小編給大家介紹的vue 兄弟組件的信息傳遞的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Vue?計(jì)算屬性之姓名案例的三種實(shí)現(xiàn)方法
這篇文章主要介紹了Vue?計(jì)算屬性之姓名案例的三種實(shí)現(xiàn)方法,計(jì)算屬性實(shí)現(xiàn)、methods實(shí)現(xiàn)和插值語(yǔ)法實(shí)現(xiàn),下面文章具體介紹,需要的小伙伴可以參考一下2022-05-05
Vue3-KeepAlive,多個(gè)頁(yè)面使用keepalive方式
這篇文章主要介紹了Vue3-KeepAlive,多個(gè)頁(yè)面使用keepalive方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
詳解Vue中l(wèi)ocalstorage和sessionstorage的使用
這篇文章主要介紹了詳解Vue中l(wèi)ocalstorage和sessionstorage的使用方法和經(jīng)驗(yàn)心得,有需要的朋友跟著小編參考學(xué)習(xí)下吧。2017-12-12
基于vue手動(dòng)實(shí)現(xiàn)一個(gè)日歷組件
這篇文章主要為大家詳細(xì)介紹了如何基于vue手動(dòng)實(shí)現(xiàn)一個(gè)日歷組件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
Vue element-ui父組件控制子組件的表單校驗(yàn)操作
這篇文章主要介紹了Vue element-ui父組件控制子組件的表單校驗(yàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Vue中計(jì)算屬性和監(jiān)聽(tīng)屬性及數(shù)據(jù)的響應(yīng)式更新和依賴收集基本原理講解
computed是vue的配置選項(xiàng),它的值是一個(gè)對(duì)象,其中可定義多個(gè)計(jì)算屬性,每個(gè)計(jì)算屬性就是一個(gè)函數(shù),下面這篇文章主要給大家介紹了關(guān)于vue中計(jì)算屬性computed的詳細(xì)講解,需要的朋友可以參考下2023-03-03
全局安裝 Vue cli3 和 繼續(xù)使用 Vue-cli2.x操作
這篇文章主要介紹了全局安裝 Vue cli3 和 繼續(xù)使用 Vue-cli2.x操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
VUE-ElementUI?時(shí)間區(qū)間選擇器的使用
這篇文章主要介紹了VUE-ElementUI?時(shí)間區(qū)間選擇器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Vue實(shí)現(xiàn)簡(jiǎn)單可擴(kuò)展甘特圖的方法詳解
Ganttastic是一個(gè)小型的Vue.js組件,用于在Web應(yīng)用程序上呈現(xiàn)一個(gè)可配置的、可拖動(dòng)的甘特圖。本文就將用它來(lái)實(shí)現(xiàn)簡(jiǎn)單可擴(kuò)展的甘特圖,感興趣的可以嘗試一下2022-11-11

