vue項目中定時器無法清除的原因解決
當(dāng)前頁面有定時器,并且定時器在離開頁面時,有清除
beforeDestroy() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},原因
當(dāng)前頁面 (假設(shè)當(dāng)前頁面為page1) 的定時器是在一系列前置請求之后,才觸發(fā)的?!敬硕〞r器前面有一堆請求,等這堆請求完成之后,定時器才會被觸發(fā)】
路由切換過快的時候,切換到了其他頁面(page2,page3...)時,當(dāng)前頁面(page1)的beforeDestroy函數(shù)已經(jīng)觸發(fā)了,但是當(dāng)前頁面(page1)的定時器還沒有觸發(fā)。當(dāng)切換到其他頁面(page2,page3...)的時候,當(dāng)前頁面(page1)的定時器才執(zhí)行。
此種情況下,定時器無法清除
解決:執(zhí)行定時器的時候,加個判斷即可
判斷路由是否為當(dāng)前page1的路由名稱。如果是當(dāng)前的路由名稱,才開始執(zhí)行定時器
假如page1的路由name是【page1】
vue2和vue3思路都是如此
if (this.$route.name === 'page1') {
this.timer = setInterval(() => {
this.getListPage()
}, 3 * 1000)
}補(bǔ):前端Vue項目中定時器清除問題
方法1:常規(guī)使用和清除
clearInterval(this.timer)//使用前先清空定時器
this.timer = setInterval(()=>{
console.log(1)
}, 1000)
方法2:使用數(shù)組存儲每一個定時器的標(biāo)識,避免某些原因?qū)е露〞r器未能清除 (如:頁面重復(fù)初始化)
if(!window.timer){ window.timer = []}
// 將存起來的定時器一并清除
window.timer.map(item=>{
clearInterval(item)
})
const timerId = setInterval(()=>{
console.log(1)
}, 1000)
window.timer.push(timerId)到此這篇關(guān)于vue項目中定時器無法清除的原因解決的文章就介紹到這了,更多相關(guān)vue 定時器無法清除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue-drag-resize 拖拽縮放插件的使用(簡單示例)
本文通過代碼給大家介紹了Vue-drag-resize 拖拽縮放插件使用簡單示例,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
vue如何設(shè)置輸入框只能輸入數(shù)字且只能輸入小數(shù)點后兩位,并且不能輸入減號
這篇文章主要介紹了vue如何設(shè)置輸入框只能輸入數(shù)字且只能輸入小數(shù)點后兩位,并且不能輸入減號問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
vite分目錄打包及去掉默認(rèn)的.gz?文件的操作方法
Vite在默認(rèn)配置下會將資源打包至assets文件夾并添加哈希值,不同于Webpack的多文件夾存放方式,Vite只對public文件夾不進(jìn)行打包處理,而Webpack不打包public和static文件夾,本文介紹vite分目錄打包及去掉默認(rèn)的.gz?文件的操作方法,感興趣的朋友一起看看吧2024-09-09

