#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 для справки.