vue的watch監(jiān)聽器取消的方法小結(jié)
1. 使用 this.$watch 創(chuàng)建的監(jiān)聽器
如果你是通過 this.$watch
動(dòng)態(tài)創(chuàng)建的監(jiān)聽器,this.$watch
會(huì)返回一個(gè)取消監(jiān)聽的函數(shù),調(diào)用該函數(shù)即可取消監(jiān)聽
export default { data() { return { count: 0, }; }, created() { // 動(dòng)態(tài)創(chuàng)建監(jiān)聽器 const unwatch = this.$watch( 'count', // 監(jiān)聽的屬性 (newVal, oldVal) => { console.log('count changed:', newVal); } ); // 取消監(jiān)聽 unwatch(); // 調(diào)用返回的函數(shù)即可取消監(jiān)聽 }, };
2. 在 watch 選項(xiàng)中定義的監(jiān)聽器
如果你是在組件的 watch
選項(xiàng)中定義的監(jiān)聽器,Vue 會(huì)在組件銷毀時(shí)自動(dòng)取消這些監(jiān)聽器,因此通常不需要手動(dòng)取消。
如果你需要手動(dòng)取消監(jiān)聽器,可以通過以下方式實(shí)現(xiàn):
方法 1:使用 this.$watch 替代 watch 選項(xiàng)
將 watch
選項(xiàng)中的監(jiān)聽器改為在 created
或 mounted
鉤子中使用 this.$watch
,然后保存返回的取消函數(shù)。
export default { data() { return { count: 0, }; }, created() { this.unwatchCount = this.$watch( 'count', (newVal, oldVal) => { console.log('count changed:', newVal); } ); }, methods: { stopWatching() { if (this.unwatchCount) { this.unwatchCount(); // 手動(dòng)取消監(jiān)聽 } }, }, beforeDestroy() { this.stopWatching(); // 在組件銷毀前取消監(jiān)聽 }, };
方法 2:通過條件控制監(jiān)聽器的執(zhí)行
如果不想完全取消監(jiān)聽器,可以通過一個(gè)標(biāo)志變量來控制監(jiān)聽器的執(zhí)行。
export default { data() { return { count: 0, isWatching: true, // 控制監(jiān)聽器的標(biāo)志 }; }, watch: { count(newVal, oldVal) { if (this.isWatching) { console.log('count changed:', newVal); } }, }, methods: { stopWatching() { this.isWatching = false; // 停止監(jiān)聽 }, }, };
3. 使用 Vue 3 的 watch 函數(shù)
在 Vue 3 中,watch
是一個(gè)獨(dú)立的函數(shù),調(diào)用后會(huì)返回一個(gè)取消監(jiān)聽的函數(shù)。
import { ref, watch } from 'vue'; export default { setup() { const count = ref(0); // 創(chuàng)建監(jiān)聽器 const stopWatch = watch(count, (newVal, oldVal) => { console.log('count changed:', newVal); }); // 取消監(jiān)聽 stopWatch(); return { count, }; }, };
總結(jié)
- 動(dòng)態(tài)創(chuàng)建的監(jiān)聽器(通過
this.$watch
或 Vue 3 的watch
函數(shù)):可以通過調(diào)用返回的取消函數(shù)來取消監(jiān)聽。 watch
選項(xiàng)中定義的監(jiān)聽器:Vue 會(huì)在組件銷毀時(shí)自動(dòng)取消,如果需要手動(dòng)取消,可以改用this.$watch
或通過條件控制監(jiān)聽器的執(zhí)行。- Vue 3 的
watch
函數(shù):直接調(diào)用返回的取消函數(shù)即可。
到此這篇關(guān)于vue的watch監(jiān)聽器取消的方法小結(jié)的文章就介紹到這了,更多相關(guān)vue watch監(jiān)聽器取消內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue表單驗(yàn)證rules及validator驗(yàn)證器的使用方法實(shí)例
在vue開發(fā)中,難免遇到各種表單校驗(yàn),下面這篇文章主要給大家介紹了關(guān)于vue表單驗(yàn)證rules及validator驗(yàn)證器使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Elementui如何限制el-input框輸入小數(shù)點(diǎn)
這篇文章主要介紹了Elementui如何限制el-input框輸入小數(shù)點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue echarts 實(shí)現(xiàn)離線中國地圖的示例代碼(細(xì)化到省份)
這篇文章主要介紹了Vue echarts 實(shí)現(xiàn)離線中國地圖,細(xì)化到省份,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09Vue遞歸組件+Vuex開發(fā)樹形組件Tree--遞歸組件的簡單實(shí)現(xiàn)
這篇文章也是我自己開發(fā)的從無到有的過程,所以它可以為你提供一些Tree組件開發(fā)的思路,本文重點(diǎn)給大家介紹vue遞歸組件的簡單實(shí)現(xiàn),感興趣的朋友跟隨小編一起看看吧2019-04-04vue項(xiàng)目動(dòng)態(tài)設(shè)置頁面title及是否緩存頁面的問題
這篇文章主要介紹了vue項(xiàng)目動(dòng)態(tài)設(shè)置頁面title及是否緩存頁面的問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11vue 使用localstorage實(shí)現(xiàn)面包屑的操作
這篇文章主要介紹了vue 使用localstorage實(shí)現(xiàn)面包屑的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11