2015-08-09 1 views
0

Я попытался остановить угловой. $ 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

Когда счетчик достигает 0, вы начинаете по телефону $scope.stop() в if блоке. Затем остальная функция выполняет и уменьшает счетчик, снова вызывает countdown(), воссоздавая новый тайм-аут.

Поместите оставшуюся часть функции в блок else, и у вас будет поведение, которое вы хотите.

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); 
    }; 
+0

По какой-то причине, когда я это сделал, обратный отсчет продолжался. – Kiong

+0

Это работает - http://codepen.io/anon/pen/dorVNV –

+0

Кажется. Наверное, на моей стороне должно быть что-то неладное. Прошу прощения, я не могу дать вам ответ, поскольку я уже выбрал Nizet's. Вместо этого я дам вам верх. :) Еще раз спасибо – Kiong