详解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六大基本类型中的原始值响应式是指 Vue 对于 JavaScript 基本数据类型的响应式实现,包括 Number、String、Boolean 和 Symbol 四个类型的数据。 Vue 对于这些数据类型的响应式实现是通过 Object.defineProperty() 方法来实现的。当 Vue 检测到数据发生变化时,会调用数据的 setter 方法…

    Vue 2023年5月28日
    00
  • 详解Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)

    从Vue3开始,推荐使用<script setup>语法,这是Vue3的新语法之一,并且它的使用方式与Vue2非常不同。使用<script setup>,我们可以更轻松地导入我们需要的属性、方法和生命周期函数,并且可以在组件之间更轻松地共享数据和方法。 在Vue3中,如果父组件想要调用子组件的方法,可以使用$refs。在Vue3中,我…

    Vue 2023年5月28日
    00
  • Vue项目总结之webpack常规打包优化方案

    那我们就来详细讲解一下“Vue项目总结之webpack常规打包优化方案”的完整攻略,包括以下内容: 一、Webpack基础知识 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器。它会递归地构建一个依赖关系图,在这个过程中将每个模块视为一个节点,并将模块之间的依赖关系转换为图中的边。 我相信作为一个Vue开发者,你一定已经熟练掌握了W…

    Vue 2023年5月28日
    00
  • vue.js实现的幻灯片功能示例

    让我来给你详细讲解“vue.js实现的幻灯片功能示例”的完整攻略。首先,我们需要安装Vue.js,并且建立一个基本的Vue.js应用。 安装Vue.js 安装Vue.js最简单的方法是使用npm (node package manager)。首先,安装node.js和npm,然后在命令行中输入以下内容: npm install vue 创建Vue.js应用 …

    Vue 2023年5月27日
    00
  • Vue开发过程中遇到的疑惑知识点总结

    针对“Vue开发过程中遇到的疑惑知识点总结”,我可以提供以下攻略: 1. Vue开发中常见的疑惑点 1.1 Vue实例的生命周期 Vue实例作为Vue项目中的核心,其生命周期的理解对于开发者来说尤为重要。Vue实例的生命周期分为8个阶段:- beforeCreate:在实例初始化之后、数据观测之前被调用。- created:在实例创建完成后被立即调用。- b…

    Vue 2023年5月29日
    00
  • Nuxt.js实战和配置详解

    Nuxt.js是一个基于Vue.js的服务端渲染框架,它可以帮助开发者快速构建出高效可靠的Web应用程序。本文将详细讲解Nuxt.js实战和配置详解,包括安装、初始化项目、路由配置、视图渲染等内容。 安装 首先,在全局安装vue-cli脚手架: npm install -g vue-cli 接着,初始化一个项目: vue init nuxt-communit…

    Vue 2023年5月28日
    00
  • 12道vue高频原理面试题,你能答出几道

    Vue高频原理面试题攻略 最近在Vue面试中涌现出了一些高频原理性的面试题,本文将给大家分享几道常见的问题及对应的答案,希望能够帮助大家在面试中游刃有余。 1. Vue组件中data为什么必须是一个函数? 在Vue组件中,data属性必须是一个函数。这是因为,如果不是函数,则会造成多个组件共享同一个数据对象,而函数每次调用都会返回一个新对象,避免了数据共享的…

    Vue 2023年5月29日
    00
  • 对vue中v-if的常见使用方法详解

    下面是针对“对vue中v-if的常见使用方法详解”的完整攻略,包含两个示例说明。 对vue中v-if的常见使用方法详解 v-if的基本使用方法 在Vue.js中,v-if指令用于控制元素是否显示。如果v-if表达式的值为true,元素将被渲染;如果v-if表达式的值为false,元素将不会被渲染。 <template> <div> &…

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