angualrJs清除定時器爬坑之路:javascript
今天發現一個奇怪問題,放在自定義指令裏邊的定時器居然在頁面跳轉以後,在另外一個頁面這個循環定時器還在執行,這確定是不行的,會影響系統的性能。java
我在angular裏邊用原生的方法window.onunload方法居然無論用,因此只好用angular本身的方法$destroy,這頁面跳轉,DOM結構發生變化是都能清除定時器app
var timer = setInterval(function(){
$scope.$apply(function(){
//這裏是想要定時刷新的邏輯
});
},3000);
$scope.$on('$destroy',function(){
if (timer) {
clearInterval(timer);
timer = null;
}
});
這裏說一下,由於我用的是javascript中原生的setTimeout()以及setInterval()函數,因此清除時對應是clearTimeout()和clearInterval(),angular定時器是$timeOut和$interval,因此清除對應是$timeOut.cancel()和$interval.cancel(),函數
必須一一對應,不一致是不會清除掉的性能