如何删除AngularJS中所有正在运行的$ interval?

Rit*_*tan 9 setinterval clearinterval angularjs

嗨,我想删除所有$interval在Angular中运行.在我的页面有很多$间隔和按钮点击我想删除所有间隔.我将如何做.

任何帮助表示赞赏.

iva*_*rni 12

根据文档 $interval返回一个promise,并且可以使用取消间隔$interval.cancel(promise).

我看不到任何取消所有间隔的方法,但是如果你将返回的promises保存在一个数组中,你可以迭代它以取消它们.

var intervals = []
intervals.push($interval(function() { /*doStuff*/ }, /*timeout*/));
intervals.push($interval(function() { /*doDifferentStuff*/ }, /*timeout*/));

...

angular.forEach(intervals, function(interval) {
    $interval.cancel(interval);
});
intervals.length = 0; //clear the array
Run Code Online (Sandbox Code Playgroud)

如果您的间隔分布在不同的控制器上,请使用服务来跟踪它们.


Fre*_*tem 5

一种更高效的方法:

var intervals = [];

intervals.push($interval(function() { /*doStuff*/ }, /*timeout*/));
intervals.push($interval(function() { /*doDifferentStuff*/ }, /*timeout*/));

//doing some stuff

while(intervals.length){
    $interval.cancel(intervals.pop());
}
Run Code Online (Sandbox Code Playgroud)

  • 首先,表上的操作较少,从而减少了迭代次数.最后,您确定阵列中的所有间隔都已停止.即使是在这个过程中出现的.最后,我没有声明任何匿名函数,因此使用的内存更少.但是你是对的,这两个代码之间的性能差距显然可以忽略不计.只是想分享我的简短解决方案.=) (2认同)