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 相关文章推荐
js 页面传参数时 参数值含特殊字符的问题
Dec 13 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
Oct 20 Javascript
js中单引号与双引号冲突问题解决方法
Oct 04 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
Jul 15 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
JS实现页面跳转与刷新的方法汇总
Aug 30 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
vue-cli4.x创建企业级项目的方法步骤
Jun 18 Javascript
微信小程序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
人族 Terran 魔法与科技
2020/03/14 星际争霸
PHP内核探索:变量概述
2014/01/30 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
JS 控件事件小结
2012/10/31 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
Bootstrap table两种分页示例
2016/12/23 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Python守护进程和脚本单例运行详解
2017/01/06 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Python可迭代对象操作示例
2019/05/07 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
学生手册家长评语
2014/02/10 职场文书
追悼会主持词
2014/03/20 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
留学推荐信怎么写
2015/03/26 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
TS 类型收窄教程示例详解
2022/09/23 Javascript