详细聊聊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的自定义指令

    深入解析Vue的自定义指令 Vue的自定义指令是Vue框架中非常重要的一部分,它们可以让我们扩展Vue的默认行为,使得我们可以在Vue应用中应对更多不同的场景。在本文中,我们将从以下几个方面来深入地解析Vue的自定义指令。 基本用法 Vue提供了全局方法Vue.directive()来注册一个自定义指令。它接收两个参数,第一个参数是指令名称,第二个参数是指令…

    Vue 2023年5月28日
    00
  • Vue两个版本的区别和使用方法(更深层次了解)

    下面是详细讲解“Vue两个版本的区别和使用方法(更深层次了解)”的完整攻略。 概述 Vue.js是一个流行的JavaScript库,用于构建现代交互式Web界面。Vue.js具有响应式且易于理解的API和一套逐渐增长的生态系统。Vue.js可以通过任何Web服务器和通过浏览器直接访问。 Vue.js的最新版本是Vue3,但Vue2也仍然广泛使用。不同的是,V…

    Vue 2023年5月28日
    00
  • vue计算属性时v-for处理数组时遇到的一个bug问题

    当使用 Vue.js 中计算属性时,我们可能会遇到一个问题,即在使用 v-for 渲染数组时,计算属性的计算结果会受到数组项顺序的影响,导致计算结果不正确。这个问题可以通过对计算属性进行优化来解决。 首先,我们可以看一下一个示例程序,它使用 v-for 和一个计算属性来渲染一个数组: <!– 在模板中使用 v-for 渲染一个数组,使用计算属性计算数…

    Vue 2023年5月29日
    00
  • 详解VUE单页应用骨架屏方案

    标题:详解VUE单页应用骨架屏方案 什么是骨架屏 骨架屏即为页面骨架,通俗点来说就是一个页面还没加载完成时,所出现的一种页面展示方案。它将页面大致的结构和样式提前定义好,填充占位元素在视觉上证明了页面正在加载。而实际上用户看到的只是一个假象,等待页面正式加载完成后,占位元素会被替换成真实的内容。 骨架屏在VUE单页应用中的应用 在VUE单页应用中,页面通过异…

    Vue 2023年5月28日
    00
  • Vue父子组件之间事件通信示例解析

    Vue父子组件之间事件通信示例解析 在Vue组件化开发中,父子组件之间需要进行信息传递和交互。Vue提供了通过事件(Event)进行父子组件之间通信的方法。本文将详细探讨Vue父子组件之间事件通信的原理和实现。 父组件向子组件传递数据 可以通过在父组件模板中,使用子组件标签的属性将数据传递给子组件,然后在子组件中通过“props”属性接受父组件传递的数据。此…

    Vue 2023年5月29日
    00
  • vue双向绑定及观察者模式详解

    Vue双向绑定及观察者模式详解 什么是双向绑定? Vue.js是一个MVVM(Model-View-ViewModel)框架,其中的“VM”指的是ViewModel,ViewModel是连接数据绑定和业务逻辑的中间层,也是Vue实现双向绑定的关键。 在Vue中,视图(View)与数据(Model)之间通过ViewModel进行双向绑定。当视图中的某个字段发生…

    Vue 2023年5月28日
    00
  • 简单理解Vue条件渲染

    简单理解Vue条件渲染 Vue条件渲染是指根据指令或者表达式的值,控制元素的显示或隐藏。常见的条件渲染指令包括 v-if、v-else、v-else-if和v-show。 v-if 指令 使用 v-if 指令可以根据表达式的值来决定元素是否显示。如果表达式的值为 true,则元素会显示;反之则不显示。例如: <template> <div&…

    Vue 2023年5月27日
    00
  • 详解jquery和vue对比

    详解jQuery和Vue对比 本文将对jQuery和Vue两个前端框架进行详细比较,包括以下内容: 两个框架的基本概念和功能; 两个框架间的异同点; 如何选择一个框架; 基于两个框架的示例说明。 基本概念和功能 jQuery jQuery是一个基于JavaScript的库,为JavaScript提供了跨浏览器的操作和事件处理的功能,使开发者可以使用更简单的语…

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