最近專案碰到Vue3主版面要將值傳遞給下面很多層的子元件,花一些時間研究,因此需要記錄下來。
採用選項式寫法,在父元件宣告變數:
data(){
return{
renewLang:''
}
}
provide:
provide() {
return {
renewLang: computed(() => this.renewLang)
}
}
子元件之inject與搭配watch
export default defineComponent({
inject: ['renewLang'],
watch: {
renewLang: {
handler(val, oldVal) {
console.log(`renewLang handler val: ${val},oldVal:${oldVal}`)
//監聽值變更並做相關動作
},
deep: true
}
},
})
參考資料來源:
https://zh-hk.vuejs.org/guide/components/provide-inject
https://zh-hk.vuejs.org/guide/essentials/watchers.html