Angular.js Таймер обратного отсчета не тикает

#javascript #angularjs

#javascript #angularjs

Вопрос:

Я пишу свой собственный таймер обратного отсчета в Angular.js как сервис. Значение отображается в элементе правильно, но обратный отсчет не ведется. Не уверен, что я делаю неправильно, так как у меня есть $interval(function(){ }, 1000); в службе, чтобы вызвать digest() и заставить его тикать.

 angular.module('monitorApp')
.factory('countDown', function($interval) {
    $interval(function(){ }, 1000);
    return {
        countDownTicker: function(secondsLeft) {
            secondsLeft = Math.round(secondsLeft/1000);
            return --secondsLeft;
        }
    }
});
  

Контроллер:

 $scope.countDownTicker = countDown.countDownTicker(result.broadcastStamp);
  

HTML:

  <span class="info-test">{{ countDownTicker }}</span>
  

ОБНОВЛЕНИЕ: Новая служба … по-прежнему не работает:

 angular.module('monitorApp')
.factory('countDown', function($interval) {
    $interval(function(){ }, 1000);
    return {
        countDownTicker: function(secondsLeft) {
            return $interval(function(secondsLeft){
                secondsLeft = Math.round(secondsLeft/1000);
                --secondsLeft;
                }, 1000);
        }
    }
});
  

Комментарии:

1. не возвращает часть интервала с завода, фактически это ничего не оборачивает. Вам нужен этот интервал для внесения изменений

2. Готово, все еще не тикает.

3. создайте демонстрационную версию в jsfiddle или plunker

4. Интервал должен запускать цикл дайджеста каждую секунду. Я подозреваю, что проблема в том, что seconds не инициализирован.

5. Передается ли он по значению вместо ссылки и, следовательно, не обновляется?

Ответ №1:

Я думаю, что вы используете $interval неправильным образом. Он возвращает обещание, о котором будет сообщаться на каждой итерации.

Смотрите пример кода в документе AngularJS для справки.