provide/inject 可以在對子孫組件進行數據傳遞,類似React中的context。
需要注意的是他不是一個響應式的數據
基礎使用
// 父組件
provide:{
return {
str: '文案'
}
},
// 子孫組件
inject:[ 'str' ]
this.str // 直接使用就行
響應式使用
可以通過父組件傳入一個響應式的值來實現
循環賦值使用
// 父組件
provide:{
return {
optionList:this.optionList
}
},
// 賦值時
res.data.forEach((i) => {
this.optionList[i] = res.data[i]
}
// 子孫組件
inject:[ 'optionList' ]
// 直接通過this.optionList 使用就可以了
如果在父組件直接賦值使用時,需要在子組件使用computed屬性傳遞一下。
// 父組件
provide:{
return {
optionList: this.optionList
}
},
// 子孫組件
inject:[ 'optionList' ]
computed:{
poptionList(){
return this.optionList
}
},
// 使用計算屬性返回的值poptionList就可以了
如果直接將 res.data.list
賦值給 this.optionList
,那么 optionList
數組將會被替換成 res.data.list
數組,而不是將 res.data.list
數組中的元素添加到 optionList
數組中。這意味著, optionList
數組將不再是一個空數組,而是一個包含了 res.data.list
數組中所有元素的新數組,這可能會導致下拉列表的渲染出現問題。
相比之下,使用數組的 push()
方法將 res.data.list
數組中的元素添加到 optionList
數組中,可以保持 optionList
數組的原有元素不變,并且可以確保下拉列表的渲染正常。