Vue provide inject 實現響應式

在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)
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章