vue3 provide 与 inject 用法

1 说明:

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

2 用法:

 父亲组件

<template>

  <div>

    <h1>父亲组件级别</h1>

    <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>

  </div>

</template>

<script setup lang='ts'>

import{ref,reactive, provide, readonly} from 'vue'

import provideAVue from './provideA.vue'

const colorVal = ref<string>('red');

//不允许子组件修改父组件的值--readonly

//provide('color', readonly(colorVal))

provide('color', colorVal)

</script>

<style scoped>

  .box{

    width: 50px;

    height: 50px;

    border: 1px solid #ccc;

    /**

      vue3 特有功能

    */

    background: v-bind(colorVal);

  }

</style>

孩子组件:provideA.vue

<template>

  <div>

    <h1>孩子级别组件</h1>

    <div>

      <button @click="change">修改provide值 yellow</button>

    </div>

    <div class="box"></div>

    <hr />

  </div>

</template>

<script setup lang='ts'>

import{ref,Ref,reactive, inject} from 'vue'

//添加默认值--第一种方法

// const color = inject<Ref<string>>('color',ref('red'));

// const change =()=>{

//   color.value = 'yellow';

// }

//第二种方法

const color = inject<Ref<string>>('color');

const change =()=>{

  // 非空断言

  color!.value = 'yellow';

}

</script>

<style scoped>

  .box{

    width: 50px;

    height: 50px;

    border: 1px solid #ccc;

     /**

      vue3 特有功能

    */

    background: v-bind(color);

  }

</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值