• Provide 和 Inject 的用法


    前言

    父子组件传参可以通过propsemit来实现,但是当组件的层次结构比较深时,propsemit就没什么作用了。vue为了解决这个提出了Provide / Inject,知道这个东西,但是一直没用过,最近碰到了一个问题,踩了一些坑,在这里记录一下

    备注:
    我安装的是vue3.x,v-model用的是3.x的语法。
    2.x和3.x用法一致,我这里是用2.x写的

    通用知识

    基本用法

    provide 选项应该是:一个对象或返回一个对象的函数
    inject 选项应该是:一个字符串数组,或 一个对象,对象的 [key] 是本地的绑定名

    provide 和 inject 绑定并不是可响应的。这是刻意为之的。

    代码执行顺序

    data->provide->created->mounted

    基本代码

    主要使用grandpagrandson这两个组件,son在这里充当一个层级

    //grandpa.vue
    
    
    
    
    
    //son.vue
    
    
    
    
    
    //grandson.vue
    
    
    
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98

    如图:
    在这里插入图片描述

    基础用法: 传个字符串

    简单修改一下组件

    //grandpa.vue
    export default {
      components: { Son },
      provide:{
         grandpaMsg:'哈哈哈'
      }
    
    
    //grandson.vue