vue 兄弟组件的信息传递的方法实例详解


Posted in Javascript onAugust 30, 2019

前言

兄弟组件的信息传递有三种方式:

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 兄弟组件的信息传递的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript 格式字符串的应用
Mar 29 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
Nov 19 Javascript
js实现在同一窗口浏览图片
Sep 17 Javascript
jQuery+easyui中的combobox实现下拉框特效
Feb 27 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
javascript学习之json入门
Dec 22 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
Jan 06 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
用Axios Element实现全局的请求loading的方法
Mar 15 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
Aug 12 Javascript
详解js动态获取浏览器或页面等容器的宽高
Mar 13 Javascript
jquery实现简单拖拽效果
Jul 20 jQuery
微信小程序sessionid不一致问题解决
Aug 30 #Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 #Javascript
Vue函数式组件的应用实例详解
Aug 30 #Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 #Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 #Javascript
js利用递归与promise 按顺序请求数据的方法
Aug 30 #Javascript
Vue-CLI 项目在pycharm中配置方法
Aug 30 #Javascript
You might like
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
Python中按值来获取指定的键
2019/03/04 Python
Python中一些深不见底的“坑”
2019/06/12 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
客服主管岗位职责
2013/12/13 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
终止合同协议书
2014/04/17 职场文书
财务部绩效考核方案
2014/05/04 职场文书
社区先进事迹材料
2014/05/19 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
2014年档案室工作总结
2014/12/01 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
图文详解matlab原始处理图像几何变换
2021/07/09 Python