2019-03更新
找到了更簡單的方法,以setinterval為例,各位自行參考
mounted() { const that = this const timer = setInterval(function () { //這里是想輪循的部分 } }, 4000) // 4000ms = 4s // 通過$once來監聽定時器,在beforeDestroy鈎子可以被清除。 this.$once('hook:beforeDestroy', () => { clearInterval(timer) // 此處的timer即 上文const的 timer }) }
建議使用這個方法。后文可忽略
--------------VUE項目中遇到一個問題。a.vue 文件中觸發setTimeout后,使用按鈕跳轉至其他頁面,快速返回至a.vue頁面后 發現定時器仍然在走。
例子:a.vue代碼
window.setTimeout(function(){
window.location.href = "/serverMonitor?t="+ new Date().getTime();
},5000)
解決辦法:
window.setTimeout(function(){
if(this && !this._isDestroyed){ //_isDestroyed 組件是否被銷毀
return;
}
window.location.href = "/serverMonitor?t="+ new Date().getTime();
},5000)
--------------清除定時器
定時器一般有兩個
1、setTimeout();//n毫秒后執行一次
2、setInterval();//每隔n毫秒執行一次
setTimeout()對應的是 clearTimeout(funName);
setInterval()對應的是 clearInterval(funName);
<script>
var funName1 = setTimeout(function(){
return ;
},1000);
var funName2 = setInterval(function(){
return fun2;
},1000)
//清除Timeout的定時器,傳入id(創建定時器時會返回一個id)
clearTimeout(funName1 );
//清除Interval的定時器,傳入id(創建定時器時會返回一個id)
clearInterval(funName2 );
//也可以使用return值 來清除
setTimeout(function(){
console.log("33");
return 33;
},3000);
clearTimeout(33);
1
</script>
