• vue3 依赖注入provide/inject


    建议在非父子(或不相关)组件传值时进行使用

    场景:App.vue 引用了A组件,A组件中有引用了B组件,甚至B有引用了C组件等时,这些组件共同使用了一个值,建议使用provide/inject的方式进行传值。
    注意:
    • 1 vue3 中可以使用v-bind方式绑定script里的变量
    • -2 在组件中更改inject传递过来的值,其它组件通过reject传递的值也会进行更改。

    代码示例如下:

    App.vue 组件:

    <template>
      <div>App 引入A B 组件</div>
      <div class="test-provide"></div>
      <A></A>
    </template>
    
    <script setup lang="ts">
    import { ref, provide } from 'vue';
    // vue3中 组件引入后,可直接使用
    import A from './A.vue'
    
    const colorValue = ref<string>('red')
    
    // 需要两个参数,类似于key,value
    provide('color',colorValue)
    
    </script>
    
    <style lang="scss" scoped>
    .test-provide {
       width:20px;
       height: 20px;
       background: v-bind(colorValue);
    }
    
    </style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    A.vue

    <template>
      <div>
        A component
      </div>
      <div class="test-provide"></div>
      <B></B>
    </template>
    
    <script setup lang="ts" name="A">
    import B from './B.vue'
    import { inject } from 'vue'
    // 引入 类型
    import type {Ref} from 'vue'
    
    // 由于App.vue 传递的是ref类型,在inject接收的时候需增加泛型,要不会是unkonw类型
    const colorValue = inject<Ref<String>>('color')
    </script>
    
    <style scoped>
    .test-provide {
        width:20px;
        height: 20px;
        /* vue3 中可以使用v-bind方式绑定script里的变量 */
        background: v-bind(colorValue);
    
    }
    </style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    B.vue

    <template>
      <div>
        B component
      </div>
      <div class="test-provide"></div>
      <button @click="updateColor">修改颜色值</button>
    </template>
    
    <script setup lang="ts" name="B">
    import { inject } from 'vue'
    import type {Ref} from 'vue'
    
    const colorValue = inject<Ref<String>>('color')
    
    // 可通过在组件中更改值,其它组件中的值也会进行更改
    const updateColor = ()=>{
        colorValue.value = 'yellow'
    }
    </script>
    
    <style scoped>
    .test-provide {
        width:20px;
        height: 20px;
        background: v-bind(colorValue);
    
    }
    </style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    【初阶数据结构】——单链表详解(C描述)
    Django集成第三方登陆(social-django)
    一站式服务:教你搭建AI知识库
    深度学习-inception模块介绍
    Linux驱动开发7---设备驱动模型的三大组件
    SCTP链路测试工具(lksctp-tools)
    基础HTML和HTML5
    OBD诊断协议从入门到精通:ISO15031
    沁恒CH32V003F4P6 开发板上手报告和Win10环境配置
    【Java dom4j 实现解析xml文件】
  • 原文地址:https://blog.csdn.net/weixin_39755186/article/details/136716147