有关角度的$ interval服务的快速问题。查看文档($interval),它们会警告您手动取消间隔,但您可以选择在初始化时提供计数参数。一旦计时器“勾选”了超过分配的计数,它是否会自行取消,或者只是停止调用该功能并在后台继续使用?
答案 0 :(得分:0)
正如相同的文档所述,建议您在取消控制器范围时取消$ interval。类似的东西:
var t = $interval(function(){
...
}, 1000);
$scope.$on('$destroy', function(){
$interval.cancel(t);
});
延迟参数是调用函数的时间间隔。在上面的示例中,每1000毫秒调用一次该函数。如果你没有取消$ interval,Angular将保留对它的引用,并可能继续执行你的函数,导致你的应用程序出现奇怪的行为。
考虑到$ interval提供程序只是本机setInterval()的包装器,带有$ apply的加法,查看Angular实现(https://github.com/angular/angular.js/blob/master/src/ng/interval.js),我们可以找到这段代码: / p>
if (count > 0 && iteration >= count) {
deferred.resolve(iteration);
clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
}
因此,解析了提供者创建的承诺,并清除了间隔。取消方法执行此操作:
intervals[promise.$$intervalId].reject('canceled');
$window.clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
所以,我认为你的假设是正确的。计数后,间隔已经清除。