组件通信就是指组件之间的数据传递。由于组件的数据是独立的,无法直接访问其他组件的数据,所以想要使用其他组件数据必须通过 组件通信!

在Vue.js中,组件之间的通信可以通过多种方式实现,包括 props、事件、$emit / $on、Vuex 状态管理等。

要讲组件通信首先来说一下组件关系。

组件关系

在Vue.js中,组件之间的关系可以分为父子关系、兄弟关系和祖先后代关系。

如图所示,A与B、C便是父子关系;B和C便是兄弟关系;A和D事祖先后代关系。

其实可以更为简略的划分为:父子关系、非父子关系。

组件通信分类

而根据组件之间的关系,可以将组件通信分类为以下几种:

1. 父子组件通信

  • Props / $emit: 父组件通过 props 向子组件传递数据,子组件通过 $emit 触发事件,向父组件传递数据。
  • $refs: 父组件可以通过 ref 属性引用子组件的实例,直接调用子组件的方法或访问子组件的数据。

2. 兄弟组件通信

  • 事件总线(Event Bus): 通过一个空的 Vue 实例作为中央事件总线,兄弟组件通过该实例进行事件的触发和监听。
  • Vuex: 使用 Vuex 进行状态管理,兄弟组件共享状态。

3. 祖先后代组件通信

  • provide / inject: 祖先组件通过 provide 提供数据或方法,后代组件通过 inject 注入数据或方法,实现祖先后代之间的通信。

4. 非直接关系组件通信

有时候,组件之间的关系并不是直接的父子、兄弟或祖先后代关系,但它们仍然需要进行通信。

  • 事件总线(Event Bus): 同样可以用于非直接关系组件之间的通信。
  • Vuex: Vuex 可以管理全局状态,任何组件都可以通过 Vuex 进行状态的读取和修改。

5. 动态组件通信

当使用动态组件时,例如通过 component 元素动态渲染不同的组件,它们之间的通信方式可以根据具体情况选择以上提到的通信方式。

实例:父传子、子传父

实现功能

实现父组件向子组件传递数据以及让子组件将数据传递回父组件。

思路

代码

父传子

父组件通过给子组件以添加属性的方式传值,例子中【:message="parentMessage"】将父组件的数据传递给了子组件。子组件内部通过声明props: ['message']来接收父组件传递过来的数据,并在模板中使用{{ message }}来显示这个数据。

<!-- ParentComponent.vue -->
<template>
<div>
<ChildComponent :message="parentMessage" />
</div>
</template> <script>
import ChildComponent from './ChildComponent.vue'; export default {
components: {
ChildComponent
},
data() {
return {
parentMessage: 'Hello from parent'
}
}
}
</script>
<!-- ChildComponent.vue -->
<template>
<div>
<p>{{ message }}</p>
</div>
</template> <script>
export default {
props: ['message']
}
</script>
子传父

子组件向父组件传递数据通常通过触发事件来实现。子组件可以使用 $emit 方法触发一个自定义事件,并将需要传递的数据作为参数传递给父组件。父组件可以监听这个自定义事件,并在事件处理函数中获取子组件传递过来的数据。

<!-- ChildComponent.vue -->
<template>
<button @click="sendMessageToParent">Send Message to Parent</button>
</template> <script>
export default {
methods: {
sendMessageToParent() {
// 触发自定义事件,并传递数据给父组件
this.$emit('messageToParent', 'Hello from child');
}
}
}
</script>
<!-- ParentComponent.vue -->
<template>
<div>
<ChildComponent @messageToParent="receiveMessageFromChild" />
</div>
</template> <script>
import ChildComponent from './ChildComponent.vue'; export default {
components: {
ChildComponent
},
methods: {
receiveMessageFromChild(message) {
// 在这里处理从子组件传递过来的数据
console.log(message); // 输出: "Hello from child"
}
}
}
</script>

Vue学习:16.组件通信的更多相关文章

  1. 浅谈vue学习之组件通信

    vue用组件化简化了我们编写代码的复杂度,组件之间经常会出现数据传递的情况,那么组件之间是怎样通信的呢? 使用props传递数据 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内 ...

  2. Vue学习笔记-组件通信-子传父(自定义事件)

    props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...

  3. Vue学习笔记-组件通信-父传子(props中的驼峰标识)

    在组件中,使用选项props来声明需要从父级接收到的数据.props的值有两种方式:方式一:字符串数组,数组中的字符串就是传递时的名称.方式二:对象,对象可以设置传递时的类型,也可以设置默认值等. & ...

  4. Vue 非父子组件通信方案

    Vue 非父子组件通信方案 概述 在 Vue 中模块间的通信很普遍 如果是单纯的父子组件间传递信息,父组件可以使用 props 将数据向下传递到子组件,而在子组件中可以使用 events (父组件需要 ...

  5. Vue的父子组件通信(转载)

    Vue是一个轻量级的渐进式框架,对于它的一些特性和优点在此就不做赘述,本篇文章主要来探讨一下Vue子父组件通信的问题 首先我们先搭好开发环境,我们首先得装好git和npm这两个工具(如果有不清楚的同学 ...

  6. Vue 非父子组件通信

    组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求.组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信.前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有 ...

  7. vue子父组件通信

    之前在用vue写子父组件通信的时候,老是遇到问题!!! 子组件传值给父组件: 子组件:通过emit方法给父组件传值,这里的upparent是父组件要定义的方法 模板: <div v-on:cli ...

  8. vue学习之组件

    组件从注册方式分为全局组件和局部组件. 从功能类型又可以分为偏视图表现的(presentational)和偏逻辑的(动态生成dom),推荐在前者中使用模板,在后者中使用 JSX 或渲染函数动态生成组件 ...

  9. vue学习之四组件系统

    vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 一.Vue.js组件系统 每一个 ...

  10. vue 中的组件通信

    vue中组件通信,一般分为三种情况,父与子,子与父,子子之间. 一.父与子通信 父组件将值传给子组件,一般通过props,设置默认的类型.调用的时候通过 xx=" ", 或者:XX ...

随机推荐

  1. 龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍 | 龙蜥技术

    简介: coolbpf,可以酷玩的BPF!来看看让BPF加了双翅膀的它究竟有多硬核? 文/系统运维 SIG(Special Interest Group) 引言 BPF 是一个新的动态跟踪技术,目前这 ...

  2. 团队管理|如何提高技术Leader的思考技巧?

    简介: 技术Leader是一个对综合素质要求非常高的岗位,不仅要有解具体技术问题的架构能力,还要具备团队管理的能力,更需要引领方向带领团队/平台穿越迷茫进阶到下一个境界的能力.所以通常来说技术Lead ...

  3. Hologres揭秘:优化COPY,批量导入性能提升5倍+

    简介: 揭秘Hologres优化COPY的技术原理,实现批量导入性能提升5倍+ Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼 ...

  4. ChatGPT,我的 .NET 应用该选择哪种日志框架?

    When using .NET 6, compare different main stream third-party logging packages, and give suggestions ...

  5. 鸿蒙HarmonyOS实战-ArkUI事件(键鼠事件)

    前言 键鼠事件是指在计算机操作中,用户通过键盘和鼠标来与计算机进行交互的行为.常见的键鼠事件包括按下键盘上的键.移动鼠标.点击鼠标左键或右键等等.键鼠事件可以触发许多不同的操作,比如在文本编辑器中输入 ...

  6. 六:大数据架构 - Flink + AI

    Flink 在AI 中的价值其实和大数据Lambda架构中流批统一这两个概念有关系,Flink为大数据实时化带来的价值也将同样使AI受益 大数据的发展过程 从Google奠基性的"三架马车& ...

  7. ubuntu下安装php pdo扩展和导入数据库

    默认安装的php不存在pdo扩展,因此在使用到的时候会报错,直接使用这个命令 apt-get install php-mysql 就可以成功安装pdo扩展 安装完数据库后需要导入sql语句,先进入数据 ...

  8. List集合中获取重复元素

    一.方法1 ## 测试数据 List<String> words = Arrays.asList("a", "b", "c", ...

  9. 网络性能监测与诊断的专家-AnaTraf

    网络性能问题是困扰许多企业和组织的常见问题.网络速度慢.延迟高.丢包率高.应用卡顿等问题都会严重影响用户体验和工作效率.为了解决这些问题,企业需要对网络流量进行分析和诊断,找出问题根源并采取措施进行优 ...

  10. C#TMS系统学习(ShippingNotice页面)

    C#TMS系统代码-业务页面ShippingNotice学习 学一个业务页面,ok,领导开完会就被裁掉了,很突然啊,他收拾东西的时候我还以为他要旅游提前请假了,还在寻思为什么回家连自己买的几箱饮料都要 ...