Vue 用$emit与$on来进行兄弟组件之间的数据传输通信

方法一:在src根目录下创建bus.js文件

// bus.js
import Vue from 'vue';
export default new Vue();

父组件

<template>
  <div>
    <pageOne></pageOne>
    <pagTwo></pagTwo>
  </div>
</template>
<script>
import pageOne from "../components/pageOne.vue";
import pagTwo from "../components/pagTwo.vue";
export default {
  components: { pageOne, pagTwo },
  data() {
    return {};
  },
};
</script>

子组件pageOne.vue发送事件

<template>
  <div>
    <h1>pageOne页面</h1>
    <button @click="setData" style="margin-left: 16px">传值过去</button>
  </div>
</template>
<script>
import Bus from "../utils/bus";
export default {
  name: "pageOne",
  data() {
    return {
      num: 8000,
    };
  },
  methods: {
    setData() {
      Bus.$emit("changeNum", this.num); //$emit用来发送事件
    },
  },
};
</script>
<style scoped>
</style>

子组件pageTwo.vue接收事件

<template>
  <div>
    <h1>pageTwo页面</h1>
    <p>传过来的值:{{ newNum }}</p>
  </div>
</template>
<script>
import Bus from "../utils/bus";
export default {
  name: "pageTwo",
  data() {
    return {
      newNum: "",
    };
  },
  mounted() {
    Bus.$on("changeNum", this.getNum);
  },
  methods: {
    getNum(num) {
      console.log("传过来的数为:", num);
      this.newNum = num;
    },
  },
  beforeDestroy() {
    //取消监听'changeNum'事件
    Bus.$off("changeNum");
  },
};
</script>
<style scoped>
</style>

方法二:在main.js全局创建EventBus

 

父组件同上

子组件pageOne.vue发送事件

<template>
  <div>
    <h1>pageOne页面</h1>
    <p>子组件pageOne输入框:</p>
    <input type="text" v-model="text" @change="textChange(text)" />
  </div>
</template>
<script>
export default {
  name: "pageOne",
  data() {
    return {
      text: "",
    };
  },
  methods: {
    textChange(val) {
      this.$eventBus.$emit("changeData", this.text); //$emit用来发送事件
    },
  },
};
</script>
<style scoped>
</style>

子组件pageTwo.vue接收事件

<template>
  <div>
    <h1>pageTwo页面</h1>
    <p>子组件pageTwo获取数据:{{ childData }}</p>
  </div>
</template>
<script>
export default {
  name: "pageTwo",
  data() {
    return {
      childData: "",
    };
  },
  mounted() {
    this.$eventBus.$on("changeData", (val) => {
      this.childData = val;
    });
  },
  beforeDestroy() {
    //取消监听'changeData'事件
    this.$eventBus.$off("changeData");
  },
};
</script>
<style scoped>
</style>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值