在Vue官方文档中指出了provide/inject并不是响应式的:

但文档同时也说了: 如果传入了可监听的对象,对象的属性还是可响应的
但在网上并没有找到比较详细的实现方法,所以只能自己尝试实现了:
实现代码
// parent.vue
export default {
provide () {
return {
provObj: new Vue({data () {
return {foo: 'bar'}
}})
}
},
created () {
// 1秒后provide中provObj对象的foo属性值更改为'parent'
setTimeout(() => {
// this._provided 指向当前vue实例的provide对象
this._provided.provObj.foo = 'parent'
}, 1000)
}
}
// child.vue
export default {
inject: ['provObj'],
created () {
// 2秒后provObj对象的foo属性值更改为'child',所有被注入provObj对象都会被更改
setTimout(() => {
this.provObj.foo = 'child'
}, 2000)
}
}
本文探讨了Vue的provide/inject选项在官方文档中提到的响应式特性。虽然直接传递的数据不是响应式的,但若传递的是可监听的对象,其属性依然可以保持响应性。博主分享了自己尝试实现这一特性的过程。
2020

被折叠的 条评论
为什么被折叠?



