前言
兄弟組件的信息傳遞有三種方式:
1.vuex 傳遞。
會將信息公有化。
此方法可在所有組件間傳遞數(shù)據(jù)。
2.建立Vue 實例模塊傳遞數(shù)據(jù)。
Vue 實例模塊會成為共用的事件觸發(fā)器。
其通過事件傳遞的信息不回被公有化。
3.建立事件鏈傳遞數(shù)據(jù)。
一個兄弟組件通過事件將信息傳給兄弟組件共有的父組件。
父組件再將信息通過屬性傳遞給另一個兄弟組件。
若兄弟組件不是親兄弟,而是堂兄弟,也就是他們有一個共同的爺爺,那么此方法會使程序變得繁瑣。
一,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 還沒說話', msgFromB:'B 還沒說話' }, 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 說:{{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 說:{{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ù)據(jù)
1.建立Vue 實例模塊 bus.js
import Vue from 'vue'export default new Vue();
2.子組件 A.vue
<template> <div class="a"> <h3>A 模塊</h3> <p>B 說:{{msgFromB}}</p> <button @click="aSay">A 把自己的信息傳給B</button> </div></template><script> import Bus from '../util/Bus' export default { data () { return { msg:'我是A', msgFromB:'B 還沒說話', } }, 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 說:{{msgFromA}}</p> <button @click="bSay">B 把自己的信息傳給A</button> </div></template><script> import Bus from '../util/Bus' export default { data () { return { msg:'我是B', msgFromA:'A 還沒說話' } }, created(){ let _this=this; Bus.$on('msgAChange',function(dt){ _this.msgFromA=dt; }) }, methods:{ bSay(){ Bus.$emit('msgBChange',this.msg); } } }</script>
新聞熱點
疑難解答
圖片精選