在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)
}
}