详解vue 组件之间使用eventbus传值

下面是详解vue组件之间使用eventbus传值的完整攻略:

什么是event bus

event bus 是Vue.js内置的一个在组件之间通信的机制,它可以让组件之间的通信变得更加简单方便。event bus是一个可以充当中央事件处理器的实例,可以用它来触发事件、监听事件或广播事件。

在组件中使用event bus

在Vue中使用event bus的步骤:

1.创建event bus

先在vue项目的src目录下新建一个event-bus.js文件(也可以把代码直接写在组件中),并在其中创建一个新的Vue实例,作为event bus。

import Vue from 'vue';
const eventBus = new Vue();
export default eventBus;

在上面代码中,我们创建了一个新的Vue实例,并将其导出,这样其他组件就可以访问它了。

2.发送事件

我们使用 eventBus.$emit('eventName', data) 来发送事件,其中 eventNamedata 分别表示事件名称和事件携带的数据。

<script>
  import Eventbus from '@/event-bus.js'

  export default {
    methods: {
      handleClick () {
        Eventbus.$emit('updateData', 'Hello, event bus!')
      }
    }
  }
</script>

在这个示例中,我们定义了一个方法 handleClick,当这个方法被调用时,我们会发送一个名为 updateData 的事件,携带的数据为 Hello, event bus!

3.接收事件

我们使用 eventBus.$on('eventName', callback) 来接收事件,其中 eventName 表示事件名称,callback 表示事件被触发后需要执行的回调函数。

<script>
  import Eventbus from '@/event-bus.js'

  export default {
    data () {
      return {
        message: ''
      }
    },
    mounted () {
      Eventbus.$on('updateData', this.updateMessage)
    },
    methods: {
      updateMessage (data) {
        this.message = data
      }
    }
  }
</script>

在这个示例中,我们通过 Eventbus.$on 方法来监听名为 updateData 的事件,在事件触发后调用 updateMessage 方法来更新数据。

示例1

下面是一个简单的实例,假设A组件需要向B组件发送数据:

在A组件中:

<script>
  import Eventbus from '@/event-bus.js'

  export default {
    methods: {
      emitData () {
        Eventbus.$emit('dataChange', 'Hello, B component!')
      }
    }
  }
</script>

在B组件中:

<template>
  <div>{{ message }}</div>
</template>

<script>
  import Eventbus from '@/event-bus.js'

  export default {
    data () {
      return {
        message: ''
      }
    },
    mounted () {
      Eventbus.$on('dataChange', this.handleDataChange)
    },
    methods: {
      handleDataChange (data) {
        this.message = data
      }
    }
  }
</script>

在上面的示例中,当A组件中的 emitData 方法被执行时,会发出名为 dataChange 的事件,并携带 Hello, B component! 的数据。B组件中的 handleDataChange 方法会监听这个事件,并在事件触发时更新 message 数据。

示例2

下面是一个稍微复杂一点的示例,假设我们需要在一个父组件中给多个子组件传递数据:

在父组件中:

<template>
  <div>
    <child-a />
    <child-b />
    <child-c />
  </div>
</template>

<script>
  import Eventbus from '@/event-bus.js'
  import ChildA from './ChildA.vue'
  import ChildB from './ChildB.vue'
  import ChildC from './ChildC.vue'

  export default {
    components: {
      ChildA,
      ChildB,
      ChildC
    },
    data () {
      return {
        message: 'Hello, all children!'
      }
    },
    mounted () {
      Eventbus.$on('dataChange', this.handleDataChange)
    },
    methods: {
      handleDataChange (data) {
        this.message = data
      }
    }
  }
</script>

在子组件中:

<template>
  <div>{{ message }}</div>
</template>

<script>
  import Eventbus from '@/event-bus.js'

  export default {
    name: 'ChildA',
    data () {
      return {
        message: ''
      }
    },
    mounted () {
      Eventbus.$on('dataChange', this.handleDataChange)
    },
    methods: {
      handleDataChange (data) {
        this.message = data
      }
    }
  }
</script>

在上面的示例中,父组件中定义了三个子组件,当父组件中的 message 数据发生变化时,会触发名为 dataChange 的事件,并携带最新的数据。每个子组件中都监听了这个事件,并在数据变化时更新自己的 message 数据。这样在页面上就可以看到三个不同的子组件都使用了最新的 message 数据。

希望这篇详解vue组件之间使用event bus传值的攻略能够帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue 组件之间使用eventbus传值 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue 使用vue-i18n做全局中英文切换的方法

    下面我就来详细讲解“vue 使用vue-i18n做全局中英文切换的方法”的完整攻略。 1. 准备工作 首先,需要在Vue项目中安装vue-i18n模块,可以通过npm命令行工具来安装。在终端中输入以下命令: npm install vue-i18n –save 安装成功后,将在项目的node_modules文件夹中看到vue-i18n的相关文件。 2. 配…

    Vue 2023年5月29日
    00
  • vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作

    要实现”vue v-for 点击当前行,获取当前行数据及 event 当前事件对象”的需求,主要分为两个步骤: 使用 v-for 渲染数据列表,绑定点击事件,处理点击事件传递参数。 通过点击事件获取当前行数据及事件对象。 下面是详细的攻略: 1. 使用 v-for 渲染列表,绑定点击事件处理参数传递 在 Vue 中使用 v-for 渲染列表非常常见。要获取当…

    Vue 2023年5月28日
    00
  • vue中如何解除数据之间的双向绑定

    在 Vue 中,数据双向绑定是其最重要的特性之一,但在某些情况下,我们可能需要解除某些数据的双向绑定,这可以通过以下两种方法实现: 1. 通过 Object.freeze() 冻结数据 Object.freeze() 是一个内置函数,它可以防止对象被修改。使用 Object.freeze() 方法将数据对象冻结即可解除双向绑定。这个方法会遍历对象的属性,并将…

    Vue 2023年5月28日
    00
  • 在Vant的基础上封装下拉日期控件的代码示例

    下面我就为你详细讲解一下“在Vant的基础上封装下拉日期控件的代码示例”的完整攻略。 1. 准备工作 在封装下拉日期控件之前,需要先准备好项目的开发环境以及需要使用的工具和框架。下面是具体步骤: 使用vue-cli创建一个vue项目,可以在终端中执行如下命令: vue create my-project 安装Vant UI框架,可以在终端中执行如下命令: n…

    Vue 2023年5月29日
    00
  • 几分钟弄懂Vuex的五大属性和使用方式

    来讲解一下“几分钟弄懂Vuex的五大属性和使用方式”的攻略。 1. 什么是Vuex? Vuex是一个专门为Vue.js开发的状态管理模式。它采用集中式存储管理您应用所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 2. Vuex的五大属性 在Vuex中,数据是通过五个核心属性进行管理:state、mutation、getter、action…

    Vue 2023年5月27日
    00
  • 详解vue-cli 脚手架项目-package.json

    下面是详解vue-cli 脚手架项目-package.json的完整攻略。 什么是vue-cli脚手架项目-package.json 在使用Vue.js构建前端项目时,我们通常使用Vue CLI来快速创建项目的基础结构。Vue CLI通过自动生成基础代码、提供开发服务器、打包和部署等功能,减少了我们在项目搭建和管理过程中的工作量。在Vue CLI生成的项目中…

    Vue 2023年5月28日
    00
  • Vue数据与事件绑定以及Class和Style的绑定详细讲解

    下面来详细讲解Vue数据与事件绑定以及Class和Style的绑定的相关知识。 Vue数据与事件绑定以及Class和Style的绑定详细讲解 数据绑定 数据绑定是Vue的一大特性,它可以将视图中的数据和真实数据进行双向绑定。在Vue中,我们通过v-model和{{}}两种方式实现数据绑定。 v-model v-model指令可以用于在表单控件或组件上创建双向…

    Vue 2023年5月27日
    00
  • vue3中的reactive函数声明数组方式

    在Vue3中,我们可以使用reactive函数来创建响应式的数据对象和数组。其中,声明数组可以有两种方式,分别是通过Array构造函数和直接使用数组字面量。 下面,将给出完整的攻略,包含以下步骤: 导入Vue3的相关模块 创建一个普通的JavaScript数组 使用Array构造函数声明一个响应式的数组 使用数组字面量声明一个响应式的数组 实现两条示例说明 …

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部