vue3+ts 依赖注入 provide inject

父级:

handlebars 复制代码
<template>
  <div>
    <h1>App.vue (爷爷级别)</h1>
    <label>
      <input type="radio" v-model="colorVal" value="red" name="color" />
      红色
    </label>
    <label>
      <input type="radio" v-model="colorVal" value="pink" name="color" />
      粉色
    </label>
    <label>
      <input type="radio" v-model="colorVal" value="yellow" name="color" />
      黄色
    </label>
    <div class="box"></div>
    <hr />
    <provideAVue></provideAVue>
  </div>
</template>

<script setup lang="ts">
import { ref, provide } from "vue";
import provideAVue from "./components/provideA.vue";
const colorVal = ref<string>("red");
provide("color", colorVal);
</script>

<style>
.box {
  height: 50px;
  width: 50px;
  border: 1px solid #ccc;
  background: v-bind(colorVal);
}
</style>

儿子级别:

handlebars 复制代码
<template lang="html">
  <div>
    <h1>provideA.vue(儿子级别)</h1>
    <div class="box"></div>
    <hr />
    <provideBVue></provideBVue>
  </div>
</template>
<script lang="ts" setup>
import { inject } from "vue";
import type { Ref } from "vue";
import provideBVue from "./provideB.vue";
const color = inject<Ref<string>>("color");
</script>
<style lang="scss">
.box {
  width: 50px;
  height: 50px;
  border: 1px solid #ccc;
  background: v-bind(color);
}
</style>

孙子级:

handlebars 复制代码
<template lang="html">
  <div>
    <h1>provideA.vue(孙子级别)</h1>
    <div>
      <button @click="change">修改 provide的值 yellow</button>
    </div>
    <div class="box"></div>
    <hr />
  </div>
</template>
<script lang="ts" setup>
import { inject } from "vue";
import type { Ref } from "vue";
const color = inject<Ref<string>>("color");
const change = () => {
  color!.value = "yellow";
};
</script>
<style lang="scss">
.box {
  width: 50px;
  height: 50px;
  border: 1px solid #ccc;
  background: v-bind(color);
}
</style>

效果图:

相关推荐
pianmian123 分钟前
坐标系与坐标系数转换
vue.js·html
水银嘻嘻24 分钟前
web 自动化之 selenium+webdriver 环境搭建及原理讲解
前端·selenium·自动化
寧笙(Lycode)27 分钟前
为什么使用Less替代原始CSS?
前端·css·less
-Camellia007-28 分钟前
TypeScript学习案例(1)——贪吃蛇
javascript·学习·typescript
m0_zj34 分钟前
57.[前端开发-前端工程化]Day04-webpack插件模式-搭建本地服务器
前端·webpack·node.js
緑水長流*z1 小时前
(14)Element Plus项目综合案例
vue.js·elementui·vue3·element plus·elementplus项目·完整项目案例·项目学习笔记
GoFly开发者1 小时前
GoFly企业版框架升级2.6.6版本说明(框架在2025-05-06发布了)
前端·javascript·vue.js
qq_392794481 小时前
前端缓存踩坑指南:如何优雅地解决浏览器缓存问题?
前端·缓存
朝阳5811 小时前
在一台服务器上通过 Nginx 配置实现不同子域名访问静态文件和后端服务
服务器·前端·nginx
水银嘻嘻1 小时前
web 自动化之 Selenium 元素定位和浏览器操作
前端·selenium·自动化