2014-11-12 6 views
0

У меня есть Угловая служба, которая обновляет $rootScope. Обновление действительно отлично работает, но оно вызывает ошибку в консоли, которая меня беспокоит.Ошибка при обновлении rootScope

app.service("scroll", function($rootScope, $window) { 

    this.scrolling = function(delta){ 
    $rootScope.scroll.current -= delta; 
    } 

    $rootScope.$apply(); 

}); 

Если удалить $rootScope.$apply() ошибка не появляется, но тогда значение rootScope, кажется, не обновляется, когда я ссылаться на него в моем HTML.

Например, в моем HTML:

{{scroll.current}} 

Это только обновления, когда я использую $rootScope.$apply(). Есть ли лучший способ обновить $rootScope, или я просто делаю что-то неправильно?

Ошибка броска:

Error: [$rootScope:inprog] http://errors.angularjs.org/1.3.0-rc.5/$rootScope/inprog?p0=%24apply 
+0

Какая ошибка вы получаете? – Satpal

+0

@Satpal Я обновил свой вопрос с ошибкой. – Coop

ответ

2

в $rootScope.$apply() вызвать $digest и в угловых в любой момент времени может быть только один $digest или $apply операция продолжается.

Использование $timeout.

app.service("scroll", function($rootScope, $window, $timeout) { 
    this.scrolling = function(delta) { 
     $rootScope.scroll.current -= delta; 
    } 

    $timeout(function() { 
     $rootScope.$apply(); //this triggers a $digest 
    }, 1); 
}); 
+1

Работает как очарование. благодаря – Coop

0

Вероятно ваши функции:

$rootScope.$apply(); 

называется также, когда он не нужен.

Вы просто должны добавить следующую строку:

if (!$rootScope.$$phase) 
     $rootScope.$apply() 

$$ фаза, когда угловая переваривает

EDIT:. Исправленный $ rootScope.apply() до $ rootScope $ применяются()

+0

Это не работает и не разбивает мой код. – Coop

+0

Я написал $ rootScope.apply() вместо $ rootScope. $ Apply() – Michael

+0

По-прежнему не работает. – Coop

Смежные вопросы