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

时间:2014-08-21 07:12:21

标签: angularjs setinterval clearinterval

您好我想删除Angular中所有正在运行的$interval。在我的页面有很多$ interval和按钮点击我想删除所有间隔。我怎么做。

感谢任何帮助。

2 个答案:

答案 0 :(得分:12)

根据documentation $interval返回一个承诺,可以使用$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

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

答案 1 :(得分: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());
}