vue的provide/inject的使用
vue的provide/inject
provide/inject 这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
说明
- 无论多少层都会被子组建拿到
- 主要用在高阶组件
- provide 选项应该是一个对象或返回一个对象的函数。
- inject 选项应该是:一个字符串数组,或 一个对象,对象的 key 是本地的绑定名
特别说明
提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
最近就碰到了这个问题
// 父级组件提供 'foo'
var Provider = {
provide: {
foo: 'bar'
},
// ...
}
// 子组件注入 'foo'
var Child = {
inject: ['foo'],
created () {
console.log(this.foo) // => "bar"
}
// ...
}按照上边的例子,发现如果修改了Provider的foo值,Child的foo并没有随着更改。官网也说了provide并不是响应的。为了解决这个问题 需要把foo变成vue的监听的对象,换句话说就是需要把foo变成对象
var Provider = {
provide() {
return {datas:this.contain
}},
data() {
return {
contain:{
foo:'foo'
}
};
},
}
var Child = {
inject: ['datas'],
created () {
console.log(this.datas.foo) // => "foo"
}
// ...
}这样修改之后foo就是响应的了
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!