vue中的provide和inject

目录

一、语法

二、使用场景

三、关于 provide/inject 的响应问题


每次看到关于vue组件传值的文章,都会讲到provide和inject这种传值方法。但是在实际的项目开发中,基本没有看到过使用这个的场景(印象中之前看iview form组件代码的时候看到过),所以这应该用于什么场景当中呢?

一、语法

用法详见vue document - provide/inject,在此不多作赘述。

二、使用场景

关于使用场景,官方文档中是这么表述的:

在 iview Form 组件中的使用:

三、关于 provide/inject 的响应问题

提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。

(以上来自官方文档)

首先,这个绑定关系是不可响应的,也就是说,更新provide的值并不会对其后代组件中的inject值造成影响。

看一个例子:

点击改变父组件中的 name 值,子组件中的数据并没有改变。

// fathers.vue
export default {
  // ...
  data() {
      return {
        name: 'Spencer'
      }
  },
  provide(){
      return {
          users: this.name
      }
  },
  methods: {
      handleChange(){
         this.name = 'new Name'
      }
  }
};

// son.vue
export default {
    // ...
    inject: {
        users: {
            default: ''
        }
    }
};

那什么时候是可响应的呢?

一、当传入一个对象的时候(或者也可以直接传入当前this对象)

// father.vue
export default {
  // ...
  data() {
      return {
          userinfo: {
              name: 'Spencer'
          },
      }
  },
  provide(){
      return {
          users: this.userinfo
      }
  }
};

// son.vue
export default {
    inject: {
        users: {
            default: ()=>{}
        },
    }
};

PS: 感觉这样子之所以可以响应应该是对象的存储问题,所以还是指向同一个地址,不知道这样子理解对不对,先写到这里,有待进一步研究。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值