VUE子組件的watch不被觸發(fā)問題及解決
VUE子組件的watch不觸發(fā)
1.起因
在父組件引入子組件,子組件引入dialog是一個彈框。
- a. prop:['flag']
- b.子組件是一個dialog彈框。
- c. 現(xiàn)在的效果是:刷新頁面,第一次的彈框出現(xiàn),將彈框關(guān)閉之后,再次點擊,彈框不出現(xiàn)。 每次傳遞給子組件的flag值是一樣,此時就不會觸發(fā)子組件里面的 watch:{ flag: 'changeFlag' }
- 指定的changeFlag方法。
2.解決方法
- a.父組件初始化一個字段:openDetailDialog: false
- b.通過以下方式傳遞給子組件
open-detail-dialog="openDetailDialog"

- c.子組件接收。從而觸發(fā)方法

- d. 關(guān)閉子組件彈框時需要注意:

- e.通過$emit給父組件通知一個事件,父組件接收事件并作出處理,在處理的方法里面對this.openDetailDialog的值取反

3.思路
Watch對應(yīng)的監(jiān)聽方法不被觸發(fā),因為watch監(jiān)聽的key對應(yīng)的 值沒有發(fā)生變化, 所以加一個臨時的變量,然后通過對其取反,來保證每一次watch監(jiān)聽的值與上一次不同,從而是watch事件生效。
VUE3項目中 watch 各種不觸發(fā)
watch基本格式
watch(監(jiān)聽的數(shù)據(jù),作用函數(shù),監(jiān)聽配置)
watch(data,
(newData, oldData) => {},
{ immediate: true, deep: true })deep:true 開啟深度監(jiān)聽
當data為reactive數(shù)據(jù)時必開啟,不然不觸發(fā)監(jiān)聽
immediate:true 頁面渲染后立刻觸發(fā)監(jiān)聽
最好所有watch都配置,不然會出現(xiàn)watch監(jiān)聽不觸發(fā)問題
const data = ref('開始')
const stu = reactive({
name: '張三',
age: '12'
})
watch(data, (newName, oldName) => {
console.log("newName", newName);
}{ immediate:true });
// reactive對象可以直接監(jiān)聽,但是oldName值會有問題
watch(stu, (newName, oldName) => {
console.log("newName", newName);
},{ deep: true,immediate:true });
// 監(jiān)聽reactive對象某個屬性變化
watch(() => stu.name,(newVal,oldVal)=>{
console.log(newVal,'新')
console.log(oldVal,'舊')
},{ deep: true,immediate:true })
// 注意子組件的props也是reactive對象
// props監(jiān)聽
props: {
index: {
type: Number,
default: 0
}
},
watch(() => props.index,(newVal,oldVal)=>{
console.log(newVal,'新')
console.log(oldVal,'舊')
},{ deep: true,immediate:true })總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Vue和Firebase實現(xiàn)一個實時聊天應(yīng)用
在本文中,我們將學習如何使用Vue.js和Firebase來構(gòu)建一個實時聊天應(yīng)用,Vue.js是一種流行的JavaScript前端框架,而Firebase是Google提供的實時數(shù)據(jù)庫和后端服務(wù),結(jié)合這兩者,我們可以快速搭建一個功能強大的實時聊天應(yīng)用,需要的朋友可以參考下2023-08-08
vue實現(xiàn)的上拉加載更多數(shù)據(jù)/分頁功能示例
這篇文章主要介紹了vue實現(xiàn)的上拉加載更多數(shù)據(jù)/分頁功能,涉及基于vue的事件響應(yīng)、數(shù)據(jù)交互等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
Vue3使用vue-qrcode-reader實現(xiàn)掃碼綁定設(shè)備功能(推薦)
本文介紹了在Vue3中使用vue-qrcode-reader版本5.5.7來實現(xiàn)移動端的掃碼綁定設(shè)備功能,用戶通過掃描二維碼自動獲取設(shè)備序列號,并填充到添加設(shè)備界面,完成設(shè)備綁定的全過程,包含ScanCode.vue和DeviceAdd.vue兩個主要界面的實現(xiàn)方式2024-10-10
Vue?處理異步加載順序問題之如何在Konva中確保文本在圖片之上顯示
在處理Konva中的異步加載順序問題時,確保在圖像加載完成后再添加其他元素是關(guān)鍵,通過將回調(diào)函數(shù)放在imageObj.onload中,并正確處理變量捕獲,我們可以確保文本總是繪制在圖片之上,這不僅解決了顯示順序的問題,也為未來的調(diào)試提供了明確的方向,感興趣的朋友一起看看吧2024-07-07

