【问题标题】:Why isnt my AngularJS cancel interval working为什么我的 AngularJS 取消间隔不起作用
【发布时间】:2015-10-30 03:26:40
【问题描述】:

我想在按下停止计时器时停止倒计时。我不确定为什么这不起作用。我有一个简单的 jsfiddle 设置 here

代码
查看

<div ng-app="timerApp" ng-controller="timerController">
    <h4>Time Remaining: {{countdown}}</h4>
    <button ng-click="startTimer()">Start Timer</button>
    <button ng-click="stopTimer()">Stop Timer</button>
</div>

控制器

angular.module('timerApp', ['timerApp.controllers']);
angular.module('timerApp.controllers', []).controller('timerController', ['$scope', '$interval', function ($scope, $interval) {
    var timer;
    var time = 10;
    $scope.countdown = time;

    $scope.stopTimer = function() {
        $interval.cancel(timer);
    };

    $scope.startTimer = function() {
        timer = $interval(function() {
           $scope.countdown--;
        }, 1000, time).then(function() {
            $scope.countdown = time;
        });
    };

}]);

【问题讨论】:

    标签: javascript angularjs timer countdown


    【解决方案1】:

    问题是调用 then 返回一个新的承诺,而不是 $interval 返回的承诺,这是 $interval.cancel() 方法所要求的

    angular.module('timerApp', ['timerApp.controllers']);
    angular.module('timerApp.controllers', []).controller('timerController', ['$scope', '$interval',
      function($scope, $interval) {
        var timer;
        var time = 10;
        $scope.countdown = time;
    
        $scope.stopTimer = function() {
          $interval.cancel(timer);
        };
    
        $scope.startTimer = function() {
          timer = $interval(function() {
            $scope.countdown--;
          }, 1000, time);
          timer.then(function() {
            $scope.countdown = time;
          });
        };
    
      }
    ]);
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="timerApp" ng-controller="timerController">
      <h4>Time Remaining: {{countdown}}</h4>
      <button ng-click="startTimer()">Start Timer</button>
      <button ng-click="stopTimer()">Stop Timer</button>
    </div>

    【讨论】:

    • 你应该为此 +100 我因这种奇怪的行为而失去了我的早晨......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多