停止Angular。$ timeout

时间:2015-08-09 19:14:30

标签: angularjs timeout

我尝试停止角度。$ 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);

    } 

非常感谢!

2 个答案:

答案 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块中,您将拥有所需的行为。