这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在其上下游关系成立的时间里始终生效。
简单来说,一个组件将自己的属性通过 provide 暴露出去,其下面的子孙组件 inject 即可接收到暴露的属性。
provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。注意,这里是要传一个可监听的对象,这个很关键。如果传的不是对象,而是可监听的基本类型也是没有用的。
// 父级
provide() {
return {
obj: this.obj,
};
},
data() {
return {
obj: {
name: "dj",
},
};
},
created() {
setInterval(() => {
this.obj.name += 1;
}, 1000);
},
// 子级
<div>{{ obj1 }}</div>
inject: {
// 这里对传过来的对象,进行了重命名
obj1: "obj"
}