父子组件及兄弟组件通信

老生常谈

父向子传递常用props、子向父传递常用$emit、兄弟之间常用eventBus

父组件App中

<template>
  <div id="app">
    <p>{{ count }}</p>
    <button @click="handleUp">+</button>
    <Home :count="count" @event-name="handleE" />
    <div>
      <About />
    </div>
  </div>
</template>


<script>
import Home from "./views/HomeView.vue";
import About from "./views/AboutView.vue";
export default {
  data() {
    return {
      count: 0,
    };
  },
  methods: {
    handleUp() {
      this.count++;
    },
    handleE(data) {
      console.log(data);
    },
  },
  components: {
    Home,
    About,
  },
};
</script>

父组件App中有两个子组件Home和About

App中有一数据count,点击按钮即增加

其中

<Home :count="count" @event-name="handleE" />

前者为父向子传递 后者为子向父传递

子组件Home中

<template>
  <div class="home">
    {{ count }}
    <button @click="handleEmit">发送给App</button>
    <button @click="emitTo">发送给About</button>
  </div>
</template>

<script>
import eventBus from "../eventBus";

export default {
  props: {
    count: {
      type: Number,
    },
  },
  methods: {                
    handleEmit() {        //这是子向父传递
      this.$emit("event-name", "hello App");
    },
    emitTo() {            //这是兄弟之间传递
      eventBus.$emit("eventFromA", "hello About");
    },
  },
};
</script>

子组件About中

<template>
  <div class="about">
    <h1>{{ title }}</h1>
  </div>
</template>
<script>
import eventBus from "../eventBus";
export default {
  data() {
    return {
      title: "",
    };
  },
  mounted() {
    this.getEventData();
  },
  methods: {
    getEventData() {
      const that = this;       //此处that是全局vue的this,以防和eventBus中this弄混
      eventBus.$on("eventFromA", function (val) {
        that.title = val;
      });
    },
  },
  beforeDestroy() {
    eventBus.$off("eventFromA");        //记得销毁
  },
};
</script>

哦对了

eventBus可以直接用vue的

 

 结果如下

count是响应式数据

同时也传给了子组件Home,子组件也反馈了一句hello App

子组件Home也向兄弟组件  About  传递一句hello About

至此

  ——————————————————————————————————————————

从零开始的学习之路

一位刚刚转行的前端小白


欢迎大家来看我的主页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值