展开说说provide和inject

写在前面

今天讲一下关于vue组件传值里面的其中一个跨组件传值,之前文章写过一篇关于组件传值,里面也有提过关于这块跨组件传值的方式,其中就提到了provide 和 inject的方式,但是并没有展开说,今天就简单的展开说一下,他的取值问题

讲解思路

今天的思路是,我会写一个demo,里面包含了三个组件,组件之间的关系是层级嵌套,比如一级引入二级,二级引入三级,类似这样的,我们今天是为了说明白一个问题,就是当一个最底层组件使用inject的时候,他的数据源是来自哪一个上级

demo
app.vue
vue 复制代码
<template>
	<LevelOne></LevelOne>
</template>

<script setup>
  import LevelOne from './components/children/LevelOne.vue'	
  import { provide } from 'vue'
  provide('content','我是app里面的数据')
</script>
一级组件
vue 复制代码
<template>
	<LevelTwo></LevelTwo>
</template>

<script setup>
	import { provide } from 'vue'
	import LevelTwo from './LevelTwo.vue'
	provide('content','我是一级组件的值')
</script>
二级组件
vue 复制代码
<template>
	<LevelThree></LevelThree>
</template>

<script setup>
	import { provide } from 'vue'
	import LevelThree from './LevelThree.vue'
	provide('content', '我是二级组件的值')
</script>
三级组件
vue 复制代码
<template>
	<div>我是三级组件,我获取的内容是:{{content}}</div>
</template>

<script setup>
	import { ref,inject } from 'vue'
	const content = ref()
	content.value = inject('content')
</script>
输出结果
js 复制代码
我是三级组件,我获取的内容是:我是二级组件的值

如果我直接将二级组件里面的提供者去掉:

vue 复制代码
<template>
	<LevelThree></LevelThree>
</template>

<script setup>
	import LevelThree from './LevelThree.vue'
</script>
输出结果
js 复制代码
我是三级组件,我获取的内容是:我是一级组件的值
结论

由上面的例子我们可以看出了,当底层组件的上级有很多同样的提供者的时候,他的原则是就近获取,今天的目的也是为了说明这个问题,因为之前那篇文章只是说了一下vue 提供了这个方法,但是并没有展开说他的使用规则。

相关推荐
Csvn1 分钟前
构建工具
前端
FRing0332 分钟前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Java小卷1 小时前
JuanForm vs FormCreate!Vue3 表单引擎联动配置 PK!
vue.js·低代码
kyriewen3 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒3 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫3 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus4 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬5 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao5 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js6 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化