前言
兄弟组件的信息传递有三种方式:
1.vuex 传递。
会将信息公有化。
此方法可在所有组件间传递数据。
2.建立Vue 实例模块传递数据。
Vue 实例模块会成为共用的事件触发器。
其通过事件传递的信息不回被公有化。
3.建立事件链传递数据。
一个兄弟组件通过事件将信息传给兄弟组件共有的父组件。
父组件再将信息通过属性传递给另一个兄弟组件。
若兄弟组件不是亲兄弟,而是堂兄弟,也就是他们有一个共同的爷爷,那么此方法会使程序变得繁琐。
一,vuex 传递数据
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 实例模块传递数据
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>
三,事件链传递数据
1.父组件 C.vue
<template> <div class="c"> <h3>事件链传递数据</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 还没说话', msgFromB:'B 还没说话' } }, 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 说:{{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 说:{{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>
总结
以上所述是小编给大家介绍的vue 兄弟组件的信息传递的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月13日
2024年11月13日
- 王闻VS曼里《不老情歌》经典粤语情歌[低速原抓WAV分轨][1G]
- 英雄联盟faker有多少联赛冠军 faker联赛冠军数量介绍
- 炉石传说酒馆战棋分数等级段位介绍 酒馆战棋分数最新等级划分一览
- 野狗子奇才三姐怎么收集 野狗子奇才三姐收集攻略
- 香港群星《电影歌曲101》6CD[WAV整轨]
- 发烧民乐-心灵乐赏系列4CD[WAV+CUE整轨]
- 【萨克斯】RichardElliot-2016-SummerMadness(24bit-FLAC)
- 《世界/崛起》新史低来袭!Steam特别好评佳作仅7元
- 盘点近期Steam30元内超好评游戏!有新史低打骨折!
- 手办鉴赏室:露比的日常约会装!神秘少女的经典制服
- 年轻人开始养黏菌当宠物了 2年内就超越了欧美和日本
- 在国际数字音乐节上 我听宫奇聊了聊星铁和游戏音乐
- 别着急入手!玩家热议PS5 Pro溢价持续不了多久
- 刘若英《老歌回忆录》原抓 [WAV+CUE][569M]
- 雷婷《今生最爱》原音1:1母版直刻CD 正版CD低速原抓[WAV+CUE][528M]