У меня есть разные страницы на приложении, которые имеют свои собственные контроллеры. Одна из них имеет функцию $ interval, скажем, таймер. Нажмите кнопку, чтобы начать эту функцию интервала, которая обновляется каждый раз. Что я хочу иметь, я хочу иметь возможность перейти к любой другой странице в моем приложении (вызов разных контроллеров), но Я хочу, чтобы мой интервал продолжал работать, пока я не остановил его явно с первого контроллера. A кореньScope интервал так сказать. Как мне это сделать?Имея угловой интервал, не зависящий от контроллера
EDIT: Спасибо Крису и Патрику я теперь есть простая служба, выглядит следующим образом:
.service('TimerService', function($interval) {
var promise;
var timerSeconds = 0;
this.start = function() {
promise = $interval(function() {
timerSeconds++;
}, 1000);
};
this.stop = function() {
promise.cancel(interval);
timerSeconds = 0;
};
this.getTimer = function() {
return timerSeconds;
}
})
хранить и мое текущее значение (timerSeconds) в этой службе. Но как я могу синхронизировать это значение с моим контроллером? Служба увеличивает таймерSeconds, а в начале моего контроллера я читаю его из этой службы через функцию getTimer(), но она явно не будет обновляться на моем контроллере. Как я могу синхронизировать этот атрибут службы с моим локальным атрибутом?
EDIT:
, когда я определить свой атрибут службы как объект и timerSeconds как номер внутри этого объекта (кажется примитивы не могут быть синхронизированы):
var timer = {seconds : 0};
this.getTimer = function() {
return timer;
}
и получить этот объект из моих через этот приемник:
vm.timer = TimerService.getTimer();
все они синхронизированы.
Итак, служба запускает обновление этого объекта данных в вашем контроллере, но что произойдет, если вы измените свой контроллер и назовете его еще раз? ваши данные и объекты подсчета будут потеряны, так как они определены в вашем контроллере. , Или я скучаю? – akcasoy
Я попытался добавить объект данных в rootScope и прочитать его оттуда. Это вроде работает, но не так приятно всегда синхронизировать vm и rootScope. Есть ли у вас какие-либо другие предложения ?. – akcasoy