美文网首页
Vue中组件之间的数据传递之eventBus

Vue中组件之间的数据传递之eventBus

作者: 都江堰古巨基 | 来源:发表于2019-07-26 22:59 被阅读0次

今天去面试,被碾压了,面试官提到了一个组件间数据传递的方式eventBus,趁热赶紧学一下。
首先在工程中要使用eventBus可以这么干:
先在main.js中指定eventBus:
Vue.prototype.$EventBus = new Vue()
相当于挂载一个Vue的实例。
下面开始尝试使用:
先编写comA用于触发一个事件在父组件中响应减操作并接受B组件的传过来的数据最后console.log出来:

<template>
  <button @click="increment()">+ 加并接受另一个组件的值!</button>
</template>

<script>
export default {
  name: 'IncrementCount',
  data() {
    return {
      num: 1,
      deg: 1
    };
  },
  methods: {
    increment() {
      this.$EventBus.$emit("incremented",{
        num: this.num,
        deg: this.deg
      });
    }
  },
  mounted() {
    // 这是响应change事件
    this.$EventBus.$on("change", test => {
      console.log(test)
    })
  }
}
</script>

然后我们编写comB,用于触发一个事件在父组件中响应加操作并传递值到comA:

<template>
  <button @click="decrease()"> -减 </button>
</template>

<script>
export default {
  name: 'DecreaseCount',
  data() {
    return {
      num: 1,
      deg: 1,
      show_data: 1000
    }
  },
  methods: {
    decrease() {
      this.$EventBus.$emit("decreased", {
        num: this.num,
        deg: this.deg,
        show_data: this.show_data  // show_data就是要传递到组件A的值
      })
    }
  }
}
</script>

最后我们编写一个父组件,将A、B组件组合在一起:

<template>
    <div id="root">
      <IncrementCount />
      <DecreaseCount />
      <div>{{ degValue }}</div>
      <div>{{ fontCount }}</div>
      <div>{{ backCount }}</div>
    </div>
</template>

<script>
import IncrementCount from '../components/add_event_bus';
import DecreaseCount from '../components/decrease_event_bus';

export default {
  name: 'App',
  components: {
    IncrementCount,
    DecreaseCount
  },
  data() {
    return {
      degValue: 0,
      fontCount: 0,
      backCount: 0
    };
  },
  mounted() {
    // 接收A组件的incremented事件
    this.$EventBus.$on("incremented", ({num, deg}) => {
      this.fontCount += num
      this.$nextTick(() => {
        this.backCount += num
        this.degValue += deg
      })
    })
    // 接收B组件的decreased事件
    this.$EventBus.$on("decreased", ({num, deg}) => {
      this.fontCount -= num
      this.$nextTick(() => {
        this.backCount -= num
        this.degValue -= deg
        // 这里触发change事件
        this.$EventBus.$emit("change", 1000)
      })
    })
  }
}
</script>

相关文章

  • vue 事件总线EventBus的概念、使用

    两个组件之间毫无关系,用到 vue 中的事件总线 EventBus的概念来传递数据 EventBus又称事件总线,...

  • Vue中组件之间的数据传递之eventBus

    今天去面试,被碾压了,面试官提到了一个组件间数据传递的方式eventBus,趁热赶紧学一下。首先在工程中要使用ev...

  • vue父子组件传递数据方法

    标签(空格分隔): vue 父组件向子组件传递数据 Vue中父组件向子组件传递数据用props 举个例子 父组件中...

  • vue 事件总线EventBus的概念、使用以及注意点

    vue组件中的数据传递最最常见的就是父子组件之间的传递。父传子通过props向下传递数据给子组件;子传父通过$em...

  • vue组件间通信

    vue组件间通信 1.父组件向子组件传递数据--props 在vue2.0中使用props实现向子组件传递数据: ...

  • Vue组件通信

    简介 组件是Vue的核心,而组件间的状态管理和数据传递是开发绕不开的问题。在Vue中,组件和组件之间是相互独立的,...

  • Vue2.x开发饿了么项目(header部分)

    header组件开发 数据之间的传递 App.vue 引入组件,App.vue 中注册组件,使用组件时 要记得传...

  • EventBus 使用以及源码浅析

    EventBus用法及解析 EventBus介绍: EventBus主要是用来组件之间进行信息传递的,相对于接口回...

  • vue 中几种传值方法

    前言 vue项目中,组件跟组件之间数据的传递是很普遍的行为,在这里总结几种常见的vue组件跟组件之间传值方式,其中...

  • vue中组件的通信方式

    在vue项目开发中,组件之间进行数据传递,是必不可少的,那么今天就来总结一下vue中组件通信的集中方式。 一、父子...

网友评论

      本文标题:Vue中组件之间的数据传递之eventBus

      本文链接:https://www.haomeiwen.com/subject/sumjrctx.html