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>

效果图:

相关推荐
ganshenml5 分钟前
sed 流编辑器在前端部署中的作用
前端·编辑器
虚伪的空想家31 分钟前
arm架构服务器使用kvm创建虚机报错,romfile “efi-virtio.rom“ is empty
linux·运维·服务器·javascript·arm开发·云原生·kvm
0***K89242 分钟前
Vue数据挖掘开发
前端·javascript·vue.js
t***26591 小时前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
蓝胖子的多啦A梦1 小时前
ElementUI表格错位修复技巧
前端·css·vue.js·el-table表格错位
_OP_CHEN1 小时前
前端开发实战深度解析:(一)认识前端和 HTML 与开发环境的搭建
前端·vscode·html·web开发·前端开发
Irene19911 小时前
ES6 export 语句 语法规范
javascript·es6·export
xiAo_Ju1 小时前
iOS一个Fancy UI的Tricky实现
前端·ios
H***99761 小时前
Vue深度学习实战
前端·javascript·vue.js
猴猴不是猴2 小时前
js实现卷轴,中间可滑动方块,左右两侧对比
javascript·css·css3