Vue3 使用provide與Inject搭配watch

最近專案碰到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