我尝试停止angular.$timeout。然而,它并没有像预期的那样工作。
签出代码
如果你按下开始键,我希望计时器在0处停止。然而,它一直是负的。然而,如果你按下"停止"按钮,它就会停止。有人能告诉我我做错了什么吗?
代码示例如下:
$scope.countdown = function() {
stopped = $timeout(function() {
if($scope.counter == 0) {
$scope.stop();
}
console.log($scope.counter);
$scope.counter--;
$scope.countdown();
}, 1000);
};
$scope.stop = function(){
$timeout.cancel(stopped);
}
非常感谢!
只要在$scope.stop()
后面加上return就可以跳出函数,这样定时器就不会重新启动了
$scope.countdown = function() {
stopped = $timeout(function() {
console.log($scope.counter);
if($scope.counter == 0) {
$scope.stop();
return; // <-- break out of the function
}
console.log($scope.counter);
$scope.counter--;
$scope.countdown();
}, 1000);
};
当计数器达到0时,您开始调用if
块中的$scope.stop()
。然后执行函数的其余部分,并减少计数器,再次调用countdown()
,重新创建一个新的超时。
将函数的其余部分放在else
块中,您将拥有您想要的行为。