provide/inject

252 阅读1分钟

provide/inject的使用

在Vue2.2.0之后,Vue还提供了provide/inject选项,这对选项允许一个祖先组件向其所有子孙后代组件注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。 在父组件只要声明了provide,在其子组件,孙组件,曾孙组件等能形成上下游关系的组件中交互,无论多深都能通过inject来访问provider中的数据,而不是局限于只能从当前父组件的prop属性来获取,所以可以把provide看作大范围的有效的prop。注意他只能做祖先通后代的单向传递的一个办法。这对选项任意层级的子组件都能访问到。

缺点:任意层级可以申明,其后的子组件层级可访问,导致数据追踪比较困难,不明确哪些层级申明了provide,哪些层级使用了inject,维护成本比较高,还是建议用Vuex解决

使用方法:

provide 提供变量
inject 注入变量

provide 选项应该是一个对象或返回一个对象的函数,使用方法为:

export default { //父组件提供provide
  name: 'Login',
  provide: {
    test: 'zhangsan',
    age: '20',
  },
  data() {},
}

子组件接受注入的值

export default {
  name: 'DialogInfo',
  props: {
    dataInfo: {
      type: Object,
      default: () => {},
    },
  },
  inject: ['test', 'age'], //子组件使用
  data() {
    return {};       
  },
  created() {
    console.log(this.test, 'test=========');
    console.log(this.age, 'age=========');
  },
}