停止 Angular.$timeout

Stopping an Angular.$timeout

我尝试停止 angular.$超时。 但是,它没有按预期工作。

检查 this codepen 以获得代码

如果你按下开始键,我希望计时器会停在 0。然而,它一直在倒数。 但是,如果您按下 "stop" 按钮,它就会停止。谁能告诉我我做错了什么?

下面的代码示例:

$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 块中,您将获得所需的行为。