当前位置: 首页 > news >正文

【Vue3】依赖注入

provide 和 inject 是 Vue.js 中用于实现依赖注入的两个关联功能。它们允许你在祖先组件中提供数据,然后在子孙组件中注入这些数据,实现组件之间的数据共享和传递。

  • provide:provide 是一个选项,你可以在父组件中通过它来提供数据。你可以在 provide 选项中声明要共享的数据。这些数据可以是任何 JavaScript 值,包括对象、函数等。

  • inject:inject 是另一个选项,你可以在子孙组件中通过它来注入父组件提供的数据。inject 的值是一个包含了你想要注入的属性名称的数组或对象。

App.vue

<template><h1>App.vue(爷爷级别)</h1><label><input v-model="colorVal" value="red" name="color" type="radio">红色</label><label><input v-model="colorVal" value="pink" name="color" type="radio">粉色</label><label><input v-model="colorVal" value="yellow" name="color" type="radio">黄色</label><div class="box"></div><hr><provideAVue></provideAVue>
</template><script setup lang="ts">
import {ref, reactive, inject, readonly,provide} from 'vue'
import provideAVue from './components/provideA.vue'
const colorVal = ref<string>('red')
provide('color', colorVal)
// 为防止子组件修改color的值,可以用readonly绑定 provide('color', readonly(colorVal))
</script><style scoped>
.box {height: 50px;width: 50px;border: 1px solid #ccc;background: v-bind(colorVal);
}
</style>

provideA.vue

<template><h1>provideA.vue(父亲级别)</h1><div class="box"></div><hr><provideBVue></provideBVue>
</template><script setup lang="ts">
import { ref, reactive, inject } from 'vue';
// 直接<ref<string>>会报错:'ref' refers to a value, but is being used as a type here. Did you mean 'typeof ref'?  需要用<Ref<string>> 引入 type {Ref}
import type {Ref} from 'vue'
import provideBVue from './provideB.vue'
const color = inject<Ref<string>>('color')</script><style scoped>
.box {height: 50px;width: 50px;border: 1px solid #ccc;background: v-bind(color);
}
</style>

provideB.vue

<template><h1>provideB.vue(孙子级别)</h1><div><button @click="change">修改 provide 的值 yellow</button></div><div class="box"></div><hr><provideBVue></provideBVue>
</template><script setup lang="ts">
import { ref, reactive, inject } from 'vue';
import type { Ref } from 'vue'
const color = inject<Ref<string>>('color', ref('red'))
// provide 传过来的值可以被子组件修改,不想被修改可以使用 readonly 对变量进行绑定
const change = () => {// 报错:'color' is possibly 'undefined'.  // color.value = 'yellow'// 报错:The left-hand side of an assignment expression may not be an optional property access.// color?.value = 'yellow'// 解决方法一:使用 !. 非空断言解决// color!.value = 'yellow'// 解决方法二:添加默认值, ref('red')color.value = 'yellow'
}</script><style scoped>
.box {height: 50px;width: 50px;border: 1px solid #ccc;background: v-bind(color);
}
</style>

需要注意的是,provide 和 inject 不适用于跨级的父子组件关系,因为 Vue 的设计是鼓励将组件树限制在父子关系中,而不是过多地嵌套。在跨级关系中,你可能需要使用 Vuex 或事件总线等其他方法来实现数据共享。

相关文章:

【Vue3】依赖注入

provide 和 inject 是 Vue.js 中用于实现依赖注入的两个关联功能。它们允许你在祖先组件中提供数据&#xff0c;然后在子孙组件中注入这些数据&#xff0c;实现组件之间的数据共享和传递。 provide&#xff1a;provide 是一个选项&#xff0c;你可以在父组件中通过它来提供数据…...

Vue 引入 Element-UI 组件库

Element-UI 官网地址&#xff1a;https://element.eleme.cn/#/zh-CN 完整引入&#xff1a;会将全部组件打包到项目中&#xff0c;导致项目过大&#xff0c;首次加载时间过长。 下载 Element-UI 一、打开项目&#xff0c;安装 Element-UI 组件库。 使用命令&#xff1a; npm …...

照耀国产的星火,再度上新!

国产之光&#xff0c;星火闪耀 ⭐ 新时代的星火⭐ 多模态能力⭐ 图像生成与虚拟人视频生成⭐ 音频生成与OCR笔记收藏⭐ 助手模式更新⭐ 插件能力⭐ 代码能力⭐ 写在最后 ⭐ 新时代的星火 在这个快速变革的时代&#xff0c;人工智能正迅猛地催生着前所未有的革命。从医疗到金融…...

大语言模型LLM的一些点

LLM发展史 GPT模型是一种自然语言处理模型&#xff0c;使用Transformer来预测下一个单词的概率分布&#xff0c;通过训练在大型文本语料库上学习到的语言模式来生成自然语言文本。 GPT-1(117亿参数)&#xff0c;GPT-1有一定的泛化能力。能够用于和监督任务无关的任务中。GPT-2(…...

leetcode810. 黑板异或游戏(博弈论 - java)

黑板异或游戏 lc 810 - 黑板异或游戏题目描述博弈论 动态规划 lc 810 - 黑板异或游戏 难度 - 困难 原题链接 - 黑板异或游戏 题目描述 黑板上写着一个非负整数数组 nums[i] 。 Alice 和 Bob 轮流从黑板上擦掉一个数字&#xff0c;Alice 先手。如果擦除一个数字后&#xff0c;剩…...

算法练习Day48|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

LeetCode: 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 1.思路 边界思维&#xff0c;只有一个元素和两个元素的初始化考虑 当元素数大于3个时&#xff0c; 逆向思维&#xff0c;是否偷最后一个元素&#xff0c;倒序得出递推公式dp[i] Math.max(dp[i - 1], dp[i …...

什么是设计模式?常用的设计有哪些?

单例模式工厂模式代理模式&#xff08;proxy&#xff09; 一、设计模式 设计模式是前辈们经过无数次实践所总结的一些方法&#xff08;针对特定问题的特定方法&#xff09; 这些设计模式中的方法都是经过反复使用过的。 二、常用的设计模式有哪些&#xff1f; 1、单例模式&…...

clickHouse部署

docker仓库地址 https://hub.docker.com/ 1、docker环境搭建 # 1.先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2 # 2.设置阿里云镜像 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 3.查…...

Flutter实现倒计时功能,秒数转时分秒,然后倒计时

Flutter实现倒计时功能 发布时间&#xff1a;2023/05/12 本文实例为大家分享了Flutter实现倒计时功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 有一个需求&#xff0c;需要在页面进行显示倒计时&#xff0c;倒计时结束后&#xff0c;做相应的逻辑处理。 实…...

【hadoop】windows上hadoop环境的搭建步骤

文章目录 前言基础环境下载hadoop安装包下载hadoop在windows中的依赖配置环境变量 Hadoop hdfs搭建创建hadfs数据目录修改JAVA依赖修改配置文件初始化hdfs namenode启动hdfs 前言 在大数据开发领域中&#xff0c;不得不说说传统经典的hadoop基础计算框架。一般我们都会将hadoo…...

一周在榜9本计算机专业新书

本周在榜计算机专业新书9本。 1、扩散模型从原理到实战 开启AI绘画新时代&#xff01;AIGC大模型来临&#xff0c;配套赠送Diffusion视频课程&#xff01; HuggingFace平台学习实战&#xff0c;常春藤盟校数据科学硕士与算法工程师带你从理论到实战&#xff0c;了解、掌握扩散…...

CSS变形与动画(二):perspctive透视效果 与 preserve-3d 3d效果(奥运五环例子)

文章目录 perspective 3d透视效果preserve-3d 3d嵌套效果例子 奥运五环 backface-visibility 背面效果 perspective 3d透视效果 perspective 指定了观察者与 z0 平面的距离&#xff0c;使具有三维位置变换的元素产生透视效果。z>0 的三维元素比正常大&#xff0c;而 z<0 …...

[论文笔记]Glancing Transformer for Non-Autoregressive Neural Machine Translation

引言 这是论文Glancing Transformer for Non-Autoregressive Neural Machine Translation的笔记。 传统的非自回归文本生成速度较慢,因为需要给定之前的token来预测下一个token。但自回归模型虽然效率高,但性能没那么好。 这篇论文提出了Glancing Transformer,可以只需要一…...

视觉学习(七)---Flask 框架下接口调用及python requests 实现json字符串传输

在项目实施过程中需要与其他系统进行接口联调&#xff0c;将图像检测的结果传递给其他系统接口&#xff0c;进行逻辑调用。这中间的过程可以通过requests库进行实现。 1.安装requests库 pip install requests2.postman 接口测试 我们先通过postman 了解下接口调用&#xff0…...

unity编写树形结构的文件管理页面

项目中需要实现点击“”按钮展开对应分类下的所有训练科目&#xff0c;再次点击“–”按钮将对应分类下的训练科目隐藏并收起整个面板。对此&#xff0c;编写一个类&#xff0c;将其挂载到树形结构的父类上&#xff0c;代码如下&#xff1a; using UnityEngine; using UnityEn…...

基于单片机的家用智能浇灌系统

1、开发环境 keil5&#xff0c;STM32CubeMX、Altium Designer 2、硬件清单 单片机&#xff1a;STM32F051K8Ux 土壤湿度传感器&#xff1a;TL - 69 温度传感器&#xff1a;DS18B20&#xff08;数字传感器直接输出数字信号&#xff09; OLED屏幕&#xff1a;OLED12864、 水…...

Solr的入门使用

Solr是Apache下的一个顶级开源项目&#xff0c;采用Java开发&#xff0c;它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言&#xff0c;同时实现了可配置、可扩展&#xff0c;并对索引、搜索性能进行了优化&#xff0c;被很多需要搜索的网站中广泛使用。…...

css鼠标样式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生&#xff0c;但鼠标样式会变成箭头...

【解决】Kafka Exception thrown when sending a message with key=‘null‘ 异常

问题原因&#xff1a; 如下图&#xff0c;kafka 中配置的是监听域名的方式&#xff0c;但程序里使用的是 ip:port 的连接方式。 解决办法&#xff1a; kafka 中配置的是域名的方式&#xff0c;程序里也相应配置成 域名:port 的方式&#xff08;注意&#xff1a;本地h…...

中心极限定理 简明教程

中心极限定理是概率论中的一组定理&#xff0c;它们描述了一些独立随机变量的和或平均值的分布在一定条件下趋近于正态分布的现象。中心极限定理有多种形式&#xff0c;其中最常见的是独立同分布的中心极限定理&#xff0c;它可以用数学公式表示为&#xff1a; 前提条件&#x…...

银河麒麟V10找不到应用商店?手把手教你从源码编译安装录屏神器Capture(附ffmpeg配置避坑)

银河麒麟V10系统下从源码构建专业录屏工具Capture的全流程指南 在国产操作系统银河麒麟V10上&#xff0c;许多用户发现系统默认没有提供应用商店&#xff0c;导致无法直接安装常用的录屏工具。本文将详细介绍如何从源码编译安装功能强大的录屏软件Capture&#xff0c;并解决ARM…...

LLaMA论文里没细说的三个‘炼丹’细节:RMSNorm、SwiGLU和RoPE到底怎么用?

LLaMA论文里没细说的三个‘炼丹’细节&#xff1a;RMSNorm、SwiGLU和RoPE到底怎么用&#xff1f; 在构建现代大型语言模型时&#xff0c;论文往往聚焦于宏观架构和性能对比&#xff0c;而将关键实现细节留给读者自行揣摩。LLaMA论文中提到的RMSNorm、SwiGLU和RoPE三项改进&…...

别让格式毁了你的论文:一份给IEEE TII投稿者的Latex排版自查清单

IEEE TII投稿LaTeX排版终极自查指南&#xff1a;从格式合规到学术表达优化 第一次向IEEE Transactions on Industrial Informatics&#xff08;TII&#xff09;投稿的研究者&#xff0c;往往会在收到编辑的格式审查意见时感到措手不及。那些看似微不足道的标点空格、公式编号或…...

DiffSinger歌声合成:3大技术革新与完整部署指南

DiffSinger歌声合成&#xff1a;3大技术革新与完整部署指南 【免费下载链接】DiffSinger An advanced singing voice synthesis system with high fidelity, expressiveness, controllability and flexibility based on DiffSinger: Singing Voice Synthesis via Shallow Diffu…...

IOT-Tree支持[子站-中心]数据同步功能-轻松支持你的物联网平台

在版本1.9.0开始&#xff0c;IOT-Tree内部移植并开源了中心-子站点的数据同步功能&#xff0c;这个功能已经在我们开发团队的企业用户系统中使用了很长一段时间&#xff0c;足够稳定和可靠。 当前很多物联网系统中&#xff0c;经常有如下需求&#xff1a; 1&#xff09;一些工…...

联想笔记本BIOS解锁神器:3分钟开启隐藏硬件性能

联想笔记本BIOS解锁神器&#xff1a;3分钟开启隐藏硬件性能 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具&#xff0c;例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/le/LEGI…...

0 基础转码学 AI:Java+Python 双语言入门,3 个月可落地实战项目

如今 AI 应用开发岗位需求持续上涨,不少零基础上班族、应届生、跨行业人群都想走转码路线入局技术行业。但很多人纠结不知道先学哪门语言,也不清楚零基础该以怎样的节奏入门,更担心学习周期太长,迟迟做不出能用于求职的实战项目。 结合当下企业真实用人需求来看,单纯只学…...

如何快速找回被遗忘的压缩包密码?ArchivePasswordTestTool终极指南

如何快速找回被遗忘的压缩包密码&#xff1f;ArchivePasswordTestTool终极指南 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经面…...

深入浅出讲解Taotoken多模型聚合API在Python项目中的集成方法

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 深入浅出讲解Taotoken多模型聚合API在Python项目中的集成方法 对于正在探索大模型能力的Python开发者而言&#xff0c;直接对接多家…...

抖音直播数据采集:如何用Golang构建实时弹幕监控系统

抖音直播数据采集&#xff1a;如何用Golang构建实时弹幕监控系统 【免费下载链接】douyin-live-go 抖音(web) 弹幕爬虫 golang 实现 项目地址: https://gitcode.com/gh_mirrors/do/douyin-live-go 在直播电商和内容创作日益火爆的今天&#xff0c;数据驱动的运营决策变得…...