15 跨组件通信依赖注入provide和inject

Provide / Inject

通常,当我们需要从父组件向子组件传递数据时,我们使用 props。想象一下这样的结构:有一些深度嵌套的组件,而深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 prop 沿着组件链逐级传递下去,可能会很麻烦。

官网的解释很让人疑惑,那我翻译下这几句话:

provide 可以在祖先组件中指定我们想要提供给后代组件的数据或方法,而在任何后代组件中,我们都可以使用 inject 来接收 provide 提供的数据或方法。 

 代码示例

额外的知识点

// let color = inject<Ref<string>>("color", ref("red")); // 1.给一个red默认值

let change = () => {

  // color?.value = "blue"; // 不能使用可选操作符? 有二种方式处理

  color!.value = "blue"; // 2.非空断言 !

};

let colorVal = ref<string>("red");

background: v-bind(

    colorVal

  ); // 在vue3中可以获取js中的变量,background-color样式不生效

顶层组件(爷爷级)

<template><!-- 可参考这个文章 --><h3>Angular依赖注入 是通过IOC控制反转和依赖注入(DI)</h3><h3>vue依赖注入provide和inject 是通过原型链</h3><div class="text">爷爷级别</div><h6>当用户点击一个单选按钮时,它就会被选中,其他同名的单选按钮就不会被选中。</h6><label><inputtype="radio"v-model="colorVal"value="yellow"name="color"/>黄色</label><label><inputtype="radio"v-model="colorVal"value="blue"name="color"/>蓝色</label><div class="box"></div><A></A>
</template><script setup lang="ts">
import {ref,reactive,watch,provide,readonly,
} from "vue";
import A from "./components/fifteen_A.vue";let colorVal = ref<string>("red");
// provide("color", readonly(colorVal)); // key value readonly约束子组件修改值
provide("color", colorVal);
watch(() => colorVal.value,(newVal) => {console.log(newVal);}
);
</script><style lang="less" scoped>
.text {color: red;
}
.box {width: 50px;height: 50px;border: 1px solid #ccc;background: v-bind(colorVal); // 在vue3中可以获取js中的变量,background-color样式不生效
}
</style>

父级组件A

<template><div class="text">父亲级别</div><div class="box"></div><B></B>
</template><script setup lang="ts">
import { ref, reactive, watch, inject } from "vue";
import B from "./fifteen_B.vue";
import type { Ref } from "vue";
//与注入provide的key保持一致,由于color推断出来的类型是unkown,由于传入的是ref,故这里需要引入Ref的泛型,再接收泛型string
// let color = inject("color");
let color = inject<Ref<string>>("color"); // 此时color推断出来的类型是: Ref<string> | undefined
</script><style lang="less" scoped>
.text {color: red;
}
.box {width: 50px;height: 50px;border: 1px solid #ccc;background: v-bind(color); // 在vue3中可以获取js中的变量,background-color样式不生效
}
</style>

孙子组件B

<template><div class="text">孙子级别</div><button @click="change">在子组件中修改provide传入的值为blue</button><div class="box"></div>
</template><script setup lang="ts">
import { ref, reactive, watch, inject } from "vue";
import type { Ref } from "vue";
let color = inject("color");
// let color = inject<Ref<string>>("color", ref("red")); // 1.给一个red默认值
let change = () => {// color?.value = "blue"; // 不能使用可选操作符? 有二种方式处理color!.value = "blue"; // 2.非空断言 !
};
</script><style lang="less" scoped>
.text {color: red;
}
.box {width: 50px;height: 50px;border: 1px solid #ccc;background: v-bind(color); // 在vue3中可以获取js中的变量,background-color样式不生效
}
</style>

效果图:

16 组件通信兄弟传参和&Bus-CSDN博客16 组件通信兄弟传参和&Bus。https://blog.csdn.net/qq_37550440/article/details/142491642?sharetype=blogdetail&sharerId=142491642&sharerefer=PC&sharesource=qq_37550440&spm=1011.2480.3001.8118

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

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

相关文章

ROS2 技术及分布式介绍

PC端开发环境搭建 WSL环境搭建 https://www.guyuehome.com/46574 In Windows 11 builds that support wslg: 1. Open up powershell and enter wsl --install ROS2系统安装 方法一 • 设置编码 Bash $ sudo apt update && sudo apt install loca…

EffcientNetV2(2021):更快、更强、效率更高的EffcientNet!

EffcientNetV2: Smaller Models and Faster Training EfficientNetV2&#xff1a;更小的模型和更快的训练 论文地址&#xff1a; https://arxiv.org/abs/2104.00298 本文介绍了 EfficientNetV2&#xff0c;这是一个新的卷积网络系列&#xff0c;与以前的模型相比&#xff0c;它…

HDFS_API文件和文件夹

代码&#xff1a; Beforepublic void init() throws URISyntaxException, IOException {URI uri new URI("hdfs://master:9000");// 创建一个配置文件Configuration entries new Configuration();// 获取到了客户端对象 // entries.set("dfs.replicat…

【嵌入式linux开发】SPI设备文件读取ICM-40609D传感器

【嵌入式linux开发】SPI设备文件操作ICM-40609D传感器 前言一、数据手册浅读二、linux系统下使用SPI设备文件操作ICM-40609-D三、ros1发布imu数据3.1、创建ros1工作空间3.2、数据发布节点代码 前言 在本篇博客中&#xff0c;将从ICM-40609-D传感器的数据手册出发&#xff0c;简…

公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构

三、平台功能设计 四、技术架构 1. 前端界面 - 采用简洁、易用的设计风格&#xff0c;适应不同终端设备的访问。 - 基于 HTML5、CSS3 和 JavaScript 构建。 2. 后端服务 - 选择主流的 Web 开发框架&#xff0c;如 未来之窗跨平台架构&#xff0c;VUE。 - 数据库…

Github Webhook触发Jenkins自动构建

1.功能说明 Github Webhook可以触发Jenkins自动构建&#xff0c;通过配置Github Webhook&#xff0c;每次代码变更之后&#xff08;例如push操作&#xff09;&#xff0c;Webhook会自动通知Jenkins服务器&#xff0c;Jenkins会自动执行预定义的构建任务&#xff08;如Jenkins …

Redis-认识与应用(从ChatGpt的角度看Redis)

问题&#xff1a;您好&#xff0c;我的项目是在线教育平台&#xff0c;用springboot3搭建&#xff0c;我现在想学redis&#xff0c;请问redis能在我的项目中有什么应用场景呢 问题&#xff1a;就是我项目能应用上具体什么场景&#xff0c;请给我例子&#xff0c;并给我具体代码…

springboot整合openfeign

文章目录 准备一、引入必要依赖二、写一个feign client并暴露到注册中心2.1 client2.2 开启Feign客户端功能 三、别的服务引入IProductClient并调用方法3.1 建一个order-service&#xff0c;引入IProductClient所在模块3.2 注入IProductClient&#xff0c;并调用方法 四、启动服…

JAVA基本简介(期末)

1、JDK JRE JVM &#xff08;1&#xff09;JDK JAVA标准开发包&#xff0c;提供了编译、运行JAVA程序所需的各种工具和资源&#xff0c;包括JAVA编译器、JAVA运行时的环境&#xff0c;及常用的JAVA类库等 &#xff08;2&#xff09;JRE JAVA运行环境&#xff0c;用于解释执行JA…

JW01二氧化碳传感器(串行通信 STM32)

目录 一、介绍 二、传感器原理 1.工作原理介绍 2.串口数据流格式 三、程序设计 main.c文件 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JW01-CO2检测模块是一种用于检测空气中二氧化碳浓度的传感器模块。它可以广泛应用于室内空气质量…

美畅物联丨GB/T 28181系列之TCP/UDP被动模式和TCP主动模式

GB/T 28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》作为我国安防领域的重要标准&#xff0c;为视频监控系统的建设提供了全面的技术指导和规范。该标准详细规定了视频监控系统的信息传输、交换和控制技术要求&#xff0c;在视频流传输方面&#xff0c;GB/T 2…

【Day20240924】05git 两人协作 冲突

git 两人协作 冲突 命令行解决 两个人修改同一文件时 的冲突可视化解决 两个人修改同一文件时 的冲突参考 命令行解决 两个人修改同一文件时 的冲突 假设kerwin.js是项目的路由文件。tiechui文件夹是组员铁锤的工作目录&#xff1b;test2008文件夹是组长的工作目录。此时&…

Redis 优化

目录 优雅的 key 删除 Bigkey 恰当的数据类型 批处理优化 Pipeline 集群下的批处理 服务端优化 持久化配置 慢查询 命令以及安全配置 内存安全和配置 内存缓冲区配置 集群最佳实践 集群带宽问题 集群还是主从 优雅的 key 删除 Bigkey Bigkey 内存占用较多&…

ubuntu 安裝 Poetry 示例

ubuntu 安裝 Poetry 示例 一、前言 poetry 是一个命令行工具&#xff0c;安装之后就可以使用 poetry 指令。可以将其安装全局环境或者是虚拟环境&#xff0c;我推荐安装在全局环境&#xff0c;这样在后面使用时不需要单独激活虚拟环境。 &#xff08;1&#xff09;安装 Poet…

【Linux】组管理权限管理任务调度【更详细,带实操】

Linux全套讲解系列&#xff0c;参考视频-B站韩顺平&#xff0c;本文的讲解更为详细 一、组管理 1、linux组的介绍 linux对文件的管理机制 linux中的文件有三个概念&#xff1a; 1、文件所有者是谁&#xff0c;谁创建了文件&#xff0c;当然文件所有者也可以修改2、文件属于…

基于内容的推荐算法

算法原理概述 首先推荐算法的作用是给用户推荐其可能喜欢的物品。此算法所依赖的数据大概分为两部分&#xff1a;&#xff08;1&#xff09;用户过去喜欢的物品&#xff1b;&#xff08;2&#xff09;每个物品的标签。 算法步骤 &#xff08;1&#xff09;根据用户过去喜欢的…

IIS HTTPS 网页可能暂时无法连接,或者它已永久性地移动到了新网址 ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY

问题描述&#xff1a;站点突然无法访问&#xff0c;经排查发现&#xff0c;HTTP协议的网址可以继续访问&#xff0c;HTTPS的网址不可以访问。 问题分析&#xff1a;在Windows更新和滚动之后&#xff0c;由于 HTTP/2&#xff0c;当站点启动了 HTTP/2 连接&#xff0c;会出现一个…

手机如何快速切换ip?探索多种方法

在当今这个信息高速流通的时代&#xff0c;IP地址作为网络世界中的独特标识&#xff0c;其重要性日益凸显。对于手机用户而言&#xff0c;无论是出于保护个人隐私、访问地域限制内容&#xff0c;还是进行网络测试等需求&#xff0c;快速切换IP地址都显得尤为关键。本文将深入探…

MySQL数据库备份详解

文章目录 引言● 数据库备份的重要性 MySQL数据库备份的基础知识● 备份类型1、完全备份2、增量备份3、差异备份 ● 备份工具与方法1、逻辑备份工具——mysqldump2、物理备份工具——Xtrabackup3、第三方解决方案 MySQL数据库备份的实施步骤1、环境准备2、选择合适的备份工具与…

大数据新视界 --大数据大厂之大数据实战指南:Apache Flume 数据采集的配置与优化秘籍

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…