Vue3 - 组件通信(父传子)

news2025/7/18 5:51:14

前言

在 Vue3 中,父组件向子组件传参的方法。

与 Vue2 相比,还是有一些区别的。

基础示例

现在我们的需求是,要通过父组件,传递一个标题来让子组件显示。

子组件 Com.vue:

<template>
  <div>{{ title }}</div>
</template>
import { ref } from 'vue'
export default {
  // 接收参数
  // 也可以这么写: props: ["msg1", "msg2"]
  props: {
    title: String,//父组件传过来的数据
  },

  // props: 组件参数(不可变)
  setup(props) {
    // 可直接 props.x 接收参数
    console.log('父组件传递的参数:', props)
    // 让其变为响应式变量
    const title = ref(props.title)
    // 暴露给模板用
    return { title }
  }
}

然后咱们打开父组件,传递 title 参数给子组件。

<template>
  <Com title="我是标题(来自父组件)" />
</template>

在这里插入图片描述
看到没,这样就传递过去了。

依赖注入

依赖注入与 Vue2 概念相同,不赘述了。

想象一下如果有这样的结构:

有一些多层级嵌套的组件,形成了一颗巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分内容。在这种情况下,如果仅使用 props 则必须将其沿着组件链逐级传递下去,这会非常麻烦,咱们为了直观一些,来看一个图。

在这里插入图片描述

你看啊,我们的 root 你可以理解为父组件,我们要向 DeepChild 子组件进行传参,但是由于它是嵌套在 Footer 子组件内,所以需要借助 Footer 再传一层,所以说,你需要两层 Props 进行传递,怎么样,理解了没。

另外,这才仅仅一层,如果嵌套多层呢?别傻了,嵌套几层,你就需要几层 Props ,很烦的好不好。

为了解决这样一个问题,咱可以使用 provide 和 inject,也就是依赖和注入。

一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。

用大白话说,就是无论你子组件嵌套的再深,哪怕 100 层,我的参数也能直接给到目标子组件,不需要你一层层往下传递了。

在这里插入图片描述
使用了依赖注入后,父组件直接 “提供(Provide)” ,子组件直接 “注入(Inject)” 使用。


说了这么概念性的东西,我们来实际操作一把。

打开 com.vue 子组件,我们来改造一下前面通过 Props 传参方式的代码。

<template>
  <div>{{ title }}</div>
</template>
import { inject } from 'vue'
export default {
  setup() {
    // 接收
    // 第一个参数(必填): 父组件提供的键名
    // 第二个参数(非必填): 当键值不存在时提供的默认值
    const title = inject('title', '无标题')
    // 暴露给模板用
    return { title }
  }
}

紧接着呢,打开父组件,咱们来提供这个参数。

<template>
  <Com />
</template>
import Com from './components/com.vue'
import { provide } from 'vue'
export default {
  components: { Com },
  setup() {
    // 提供
    // 第一个参数(必填): 注入名
    // 第二个参数(必填): 供给的值(可以是响应式,如ref等)
    provide('title', '登dua郎')
  }
}

在这里插入图片描述

全局提供

这个 “提供(provide)” 也可以放在整个 “应用层面”。

啥意思呢,就是我们可以放在 main.js 入口文件,为所有组件提供数据。

import { createApp } from 'vue'
const app = createApp({})
app.provide(/* 注入名 */ 'message', /* 值 */ 'hello!')

这种做法通常在什么情况下用呢?

那就是当你在编写插件时会特别有用,因为插件一般都不会使用组件形式来供给值。

写在后面

总的来说呢,要分场景,如果不涉及到子组件的嵌套,安心用 Props 即可,反之依赖注入即可。

其实早在 Vue3 之前,Vue2 中已经提供了依赖注入这样一个功能。其实这种写法呢,有利也有弊,虽然不用层层传递 Props,但其组件复杂时,这将非常混乱且难以维护!

SEO

Vue3.js官方文档,vue3.js 组件通信,vue3.js组件通信 父传子 教程,vue3组件之间通信(一)——父传子属性和方法,vue3 父子组件通信详细教程,Vue3组件间通信——父子传值、方法调用,Vue3父子组件间传参通信,vue3.0之组件通信之父子通信,Vue 3 父子组件传递数据的几种通信方式,vue3 父子组件通信,vue3 父子组件间的传值通信,vue2.0组件之间通信(父子、子父、平级) ,vue3.0组件之父传子,Vue3 - 组件通信(父传子)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据工程师必备之数据可视化技术

可视化技术 数据&#xff1a; 偏耀明 7800 高军鹏 8000 代欣 8800 王国庆 20000 ​ 应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据、生产数据、用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数…

tp6使用redis消息队列

尾部写入 for ($i1;$i<1000;$i){Cache::store(redis)->rpush(list,date("Y-m-d H:i:s")."消息{$i}"); }头部读取消息队列并删除 $list Cache::store(redis)->lpop(list); 1、新建个方法运行写入队列 public function hello(){for ($i1;$i<…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: erase

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/erase/ 公有成员函数 <deque> std::deque::erase C98 iterator erase (iterator position); iterator erase (iterator first, iterator last); C11 iterator erase (const_iterator position )…

Android 后台服务启动Actvity

一、问题背景 相机自动化测试需求&#xff0c;测试apk通过bindService绑定相机apk里面的一个服务&#xff0c;通过AIDL接口的方式向相机apk发送命令&#xff0c;服务接收到命令之后会拉起相机的Activity。原本没有人为干预的情况下是可以拉起这个Activity的&#xff0c;但是拉…

基于PYTHON游乐场服务管理系统的设计与实现

摘要 项目门票是游乐园必不可少的一个部分。在游乐园发展的整个过程中&#xff0c;项目门票担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类管理系统程序也在不断改进。本课题所设计的游乐场服务管理系统&#xff0c;使用Django框架&#xff0c;Python语言进…

如何优雅部署OpenStack私有云I--Kolla

为方便大数据平台与管理工具的研发&#xff0c;在公司成本不额外增加的情况下&#xff0c;从公司仓库里拉了几台下线物理机来做大数据平台的实验环境。但整体物理机性能都偏高&#xff0c;单独安装一个大数据服务&#xff0c;很豪&#xff0c;但是也很浪费。而且主机台数不是很…

优先级队列(堆)——小记

文章目录堆概念堆的创建堆向下调整堆的插入堆的删除堆排序整体代码&#xff08;创建堆&#xff08;向下调整&#xff09;&#xff0c;堆的插入&#xff0c;堆的删除&#xff0c;堆排序&#xff09;TOPKPriorityQueue特性堆 概念 如果有一个关键码的集合Kk0&#xff0c;k1&…

48 基于 jdk9 编译的 jdk8 的字节码报错

前言 呵呵 大概是由于最近的这个 “Apache Log4j被曝存在严重高危险级别远程代码执行漏洞” 昨天晚上 编译了一下 logging-log4j2-log4j-2.15.0-rc2, 项目需要一个 toolchain.xml 的一个配置, 里面需要配置为 jdk9 因此 我的项目配置的 jdk 为 jdk9 然后 idea 里面默认…

【计算机毕业设计】校园二手市场平台+vue源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐…

校园跑腿系统小程序怎么用_校园跑腿系统小程序的基本功能是什么

大学可能是人生中最可能的阶段&#xff0c;而大学也是创业的最佳选择。近年来&#xff0c;在微信小程序的红利生态圈下&#xff0c;校园跑腿系统系统已经成为大学校园创业的第一热点。 随着大学生人数的增加&#xff0c;消费水平也在不断地提高&#xff0c;大学校园内代取快递、…

交换机之trunk access hybrid 以及vlan深入理解

服务器开发系列 文章目录服务器开发系列一、802.1Q封装VLAN数据帧格式是&#xff1f;二、Access Trunk Hybrid是什么&#xff1f;三、Access Trunk Hybrid数据处理流程是什么&#xff1f;四、示例五、最简单交换机应用总结一、802.1Q封装VLAN数据帧格式是&#xff1f; IEEE 80…

kubernetes中ingress控制器traefik获取真实客户源IP

一.现象 公司kubenetes生产环境使用的ingress控制器是traefik&#xff0c;默认是通过deployment部署的&#xff0c;现在研发上反馈不能获取客户的真实源IP地址&#xff0c;通过x_forward_for获取的IP地址都是kubernetes集群内部的IP地址。 二.解决思路 通过查找traefik的官方…

【雨夜】业务中 自定义异常用 Exception 还是 RuntimeException? 为什么?

今天和同事 聊了下异常 相关的事&#xff0c;整理在此 目前公司中使用的 自定义异常是 extend RuntimeException 目录 思维导图 继承异常 我们在业务开发中 继承异常是extend RuntimeException 还是 Exception呢 一想 这肯定是 RuntimeException 啊&#xff0c;但是这是为什…

kingdee漏洞金蝶云星空存在弱口令漏洞

kingdee漏洞简介 金蝶云星是基于云计算、大数据、社交、人工智能、物联网等前沿技术研发的新一代战略性企业管理软件。金蝶云星空存在弱口令漏洞&#xff0c;攻击者利用该漏洞登录系统后台&#xff0c;获取敏感信息。 CNNVD编号&#xff1a;CNVD-2022-15854危害等级&#xff…

【C++笔试强训】第二十七天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

使用PostMan测试WebService接口

在浏览器中输入 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 查看是否启动服务&#xff0c;确保WS地址可用。通过地址获取获取WSDL地址相关参数&#xff0c;并找空间命名&#xff0c;这个位置是固定的&#xff0c;下面会用到&#xff0c;这里是 http://WebXml.c…

62岁腾格尔要开线上演唱会,直播间能否唱《遥远的地方》成焦点

人生六十岁一花甲&#xff0c;著名草原歌手腾格尔&#xff0c;在经历了人生的风风雨雨后&#xff0c;如今已经步入了六十二岁的年龄。虽然已经年过花甲&#xff0c;但是腾格尔老师依旧意气风发&#xff0c;他的个人线上演唱会&#xff0c;也准备在11月19日与大家见面。 在网友的…

【C++布隆过滤器和哈希切分】

目录 1.布隆过滤器概念 2.布隆过滤器优点 3.哈希切分 位图储存的类型只能是整形&#xff0c;有没有储存自定义类型或者是字符串类型的“位图”呢&#xff1f; 1.布隆过滤器概念 步隆过滤器是由布隆&#xff08;Burton Howard Bloom&#xff09;在1970年提出的 一种紧凑型的…

从3D ToF到智能座舱系统方案,英飞凌如何赋能未来出行?

当前&#xff0c;全球汽车产业正处于大变革和市场重构的关键时期&#xff0c;智能汽车新时代的大幕已然拉开。 “智能座舱、人机交互已经成为车载信息娱乐系统‘智能化’的新亮点。”英飞凌相关负责人表示。在汽车智能化、网联化、电动化等大趋势下&#xff0c;越来越多的创新…

【C++进阶】map和set——下篇(红黑树的学习以及封装map和set)

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…