详细聊聊vue组件是如何实现组件通讯的

Vue组件通讯是指在Vue应用中,组件之间通过交互实现信息传递和共享数据的一种方式。Vue提供了多种方式来实现组件通讯,如props、$emit、$parent、$children、eventBus、vuex等。在接下来的篇章中,我们将详细讲解Vue组件通讯的实现方式及其应用场景。

一、Props和$emit

在Vue组件中,子组件可以通过props属性来传递数据,父组件可以通过$emit方法来触发事件,从而实现父子组件之间的通讯。

<!-- 父组件 -->
<template>
  <div>
    <h1>父组件</h1>
    <Child :childData="data" @childItemClick="handleChildItemClick"></Child>
  </div>
</template>

<script>
import Child from './Child'

export default {
  name: 'Parent',
  data() {
    return {
      data: [
        {
          id: 1,
          name: 'Tom',
          age: 18
        },
        {
          id: 2,
          name: 'Jerry',
          age: 16
        }
      ]
    }
  },
  methods: {
    handleChildItemClick(item) {
      console.log('父组件收到子组件传来的数据:', item)
    }
  },
  components: {
    Child
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    <h2>子组件</h2>
    <ul>
      <li v-for="item in childData" :key="item.id" @click="handleClick(item)">{{item.name}}</li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'Child',
  props: {
    childData: {
      type: Array,
      default: () => []
    }
  },
  methods: {
    handleClick(item) {
      this.$emit('childItemClick', item)
    }
  }
}
</script>

上面的代码演示了父子组件之间的通讯,父组件传递数据给子组件,并监听子组件触发的事件。在子组件中,我们使用props属性接收父组件传递过来的数据,并在点击列表项时用$emit方法向父组件触发自定义事件。

二、EventBus

EventBus是Vue提供的一种事件机制,它可以让我们在任何组件中进行事件的监听和触发,从而实现组件间的通讯。

<!-- 组件A -->
<template>
  <div>
    <h1>组件A</h1>
    <button @click="handlerClick">传递数据</button>
  </div>
</template>

<script>
import { bus } from '../eventBus'

export default {
  name: 'ComponentA',
  methods: {
    handlerClick() {
      bus.$emit('componentAEvent', 'hello world')
    }
  }
}
</script>

<!-- 组件B -->
<template>
  <div>
    <h1>组件B</h1>
    <p>接收到的数据:{{ data }}</p>
  </div>
</template>

<script>
import { bus } from '../eventBus'

export default {
  name: 'ComponentB',
  data() {
    return {
      data: ''
    }
  },
  mounted() {
    bus.$on('componentAEvent', (data) => {
      this.data = data
    })
  }
}
</script>

在上面的代码中,我们定义了一个名为eventBus的公共事件总线,组件A通过eventBus的$emit方法向eventBus触发自定义事件,同时可以传递数据。组件B在mounted生命周期中,通过eventBus的$on方法监听到组件A触发的自定义事件,并通过回调函数接收到传递过来的数据。这样就实现了组件A和组件B之间的通讯。

除此之外,Vue还提供了多种组件通讯的方式,如:$parent、$children、provide、inject、vuex等,可能根据不同的应用场景选择不同的通讯方式进行实现。

总之,了解Vue组件通讯的各种实现方式及其应用场景对我们开发高质量的Vue应用有着重要的意义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细聊聊vue组件是如何实现组件通讯的 - Python技术站

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

相关文章

  • Vue.js函数式组件的全面了解

    Vue.js函数式组件的全面了解 一、什么是函数式组件 函数式组件是指仅接收 props,并且没有像组件实例这样的状态(也就是 data 选项)的组件。这意味着函数式组件无法像普通组件那样维护自身的状态,但是,由于它们没有状态,所以它们渲染起来开销较小,执行效率更高。函数式组件是 Vue 2.3 新增的特性。 二、如何定义函数式组件 定义函数式组件很简单,直…

    Vue 2023年5月27日
    00
  • el-date-picker日期选择限制范围的实例代码

    下面是关于el-date-picker日期选择限制范围的实例代码的完整攻略。 1. 前置知识 在讲解实例代码之前,我们需要掌握以下基本知识: el-date-picker是一个基于element-ui的日期选择器组件; el-date-picker可以通过picker-options属性限制日期选择的范围; picker-options中可以设置disabl…

    Vue 2023年5月29日
    00
  • vue3 文档梳理快速入门

    下面是关于“vue3 文档梳理快速入门”的完整攻略。 简介 Vue.js 是一款渐进式 JavaScript 框架,具有简洁、高效、灵活等特点,在前端开发中得到广泛应用。Vue.js 3.0 是 Vue.js 的最新版本,与 Vue.js 2.x 相比,它更快、更小、更易于使用。本文主要介绍 Vue.js 3.0 的文档梳理快速入门。 文档梳理 Vue.js…

    Vue 2023年5月28日
    00
  • vue开发中数据更新但视图不刷新的解决方法

    当我们在Vue开发中使用数据绑定时,有时候会遇到数据更新了但视图没有及时刷新的情况,这往往是因为Vue的响应式系统没有及时捕捉到数据的变化。下面我将为您介绍几种解决方案。 1. 使用Vue.set或this.$set强制数据响应式更新 Vue2.0之后提供了Vue.set或this.$set方法,可以用来更新数据并强制响应式系统重新渲染视图。我们可以使用这个…

    Vue 2023年5月29日
    00
  • Vue.js状态管理之Pinia与Vuex详解

    Vue.js状态管理之Pinia与Vuex详解 状态管理是什么 在一些大型 Web 应用中,数据的流转较为复杂,需要对数据的读写进行控制和管理,以保证应用的数据一致性和可靠性,而状态管理就是一种用于控制和管理应用数据的方法。 在 Vue.js 中,状态管理可以使用两种比较流行的库实现:Vuex 和 Pinia。 Vuex 简介 Vuex 是一个专门为 Vue…

    Vue 2023年5月27日
    00
  • 在 Vue.js中优雅地使用全局事件的方法

    在 Vue.js 中,全局事件可以在不同组件之间传递信息。但是如果使用不合适,会导致代码变得混乱和难以维护。下面让我们看一下如何优雅地使用 Vue.js 中的全局事件。 什么是全局事件 在 Vue.js 中,我们可以使用自定义事件系统来在不同组件之间传递信息。在根组件中使用 $emit 方法触发自定义事件,在其他组件中使用 $on 监听自定义事件。 全局事件…

    Vue 2023年5月28日
    00
  • Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例

    下面是详细的攻略: Vue + WebSocket + WaveSurferJS 实现H5聊天对话交互的实例 实现思路 本实例使用Vue框架,结合WebSocket实现即时通讯,配合WaveSurferJS实现音频波形效果。 使用Vue框架建立页面,实现主要交互逻辑; 使用WebSocket实现即时通讯,并实现接收和发送消息功能; 使用WaveSurferJ…

    Vue 2023年5月28日
    00
  • Vue中使用Lodash的实现示例

    下面是详细讲解“Vue中使用Lodash的实现示例”的完整攻略。 Vue中使用Lodash的实现示例 什么是Lodash Lodash 是一个现代 JavaScript 实用工具库,提供了许多常见的操作方法和函数。 在 Vue 中使用 Lodash 安装 Lodash 使用npm安装Lodash npm install –save lodash 或者是ya…

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