我尝试停止角度。$ timeout。 但是,它没有按预期工作。
结帐this codepen代码
如果你按下开始,我希望计时器停在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);
}
非常感谢!
答案 0 :(得分:1)
只需在$scope.stop()
之后添加返回以打破该功能,这样定时器就不会再次启动。
$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);
};
答案 1 :(得分:0)
当计数器达到0时,您可以通过调用$scope.stop()
块中的if
开始。然后执行该函数的其余部分,并递减计数器,再次调用countdown()
,重新创建新的超时。
将该功能的其余部分放在else
块中,您将拥有所需的行为。