VUE 兄弟组件传值

文章介绍了如何在Vue中通过创建一个bus.js文件作为事件总线,利用$emit和$on方法实现兄弟组件之间的数据传递。在父组件中注册子组件,然后在各自子组件中引入bus并监听或触发事件来达到通信目的。例如,testB组件通过bus向testA组件发送数据,testA组件则通过$on监听并接收数据。
摘要由CSDN通过智能技术生成

兄弟组件之间的传值和父子组件之间的传值非常相似,都是通过$emit;

原理是:vue一个新的实例,类似于一个站,连接着两个组件,也就是一个中央事件总线;

1.在项目中创建一个bus.js文件,暴露一个vue实例

import Vue from 'vue';

export default new Vue;

2.在父组件中注册两个子组件testA、testB

<template>
  <div class="pre-wrap">
    <test-a></test-a>
    <test-b></test-b>
  </div>
</template>

<script>
import TestA from '../../../components/commiss/testA.vue';
import TestB from '../../../components/commiss/testB.vue';
export default {
  components: { TestA, TestB, },
}

3.在两个子组件中分别引入bus

import bus from '../../common/config/bus';

 4.testB组件传值给testA组件:(传值使用$emit)

testA组件接收到testB组件的值:(接收值使用$on)

testA.vue子组件

<template>
  <div>
    <div>我是testA{{myList}}</div>
    <div @click="clear()">清空</div>
  </div>
</template>

<script>
import bus from '../../common/config/bus';
export default {
  components: {},
  data() {
    return {
      myList: [],
    };
  },

  mounted() {
    bus.$on('sendList', data => {
      this.myList = data;
    })
  },

  methods: {
    clear() {
      this.myList=[];
      bus.$emit('sendList', this.myList);
    },
  },
}

</script>

testB.vue子组件

<template>
  <div style="color:red; border-top:1px solid #333;">
    <div>{{list}}</div>
    <div @click="clickHandle()">B事件</div>
  </div>
</template>

<script>
import bus from '../../common/config/bus';
export default {
  components: {},
  data () {
    return {
      list:[],
    };
  },

  mounted() {
    bus.$on('sendList', data => {
      this.list = data;
    })
  },

  methods: {
    clickHandle(){
      this.list.push('a')
      bus.$emit('sendList',this.list);
    },
  },

}
</script>

到这里其实使用bus总线实现兄弟组件之间的传值已经完成。

演示结果如下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值