我有一个更新$rootScope
的Angular服务。更新实际上工作正常,但它在控制台中引发了一个让我担心的错误。
app.service("scroll", function($rootScope, $window) {
this.scrolling = function(delta){
$rootScope.scroll.current -= delta;
}
$rootScope.$apply();
});
如果我删除了$rootScope.$apply()
,则不会显示错误,但是当我在HTML中引用它时,rootScope值似乎没有更新。
例如在我的HTML中:
{{scroll.current}}
这仅在我使用$rootScope.$apply()
时更新。是否有更好的方法来更新$rootScope
,或者我只是做错了什么?
抛出错误:
Error: [$rootScope:inprog] http://errors.angularjs.org/1.3.0-rc.5/$rootScope/inprog?p0=%24apply
答案 0 :(得分: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 :(得分:0)
可能是你的功能:
$rootScope.$apply();
也在不需要时调用。
你只需添加这一行:
if ( !$rootScope.$$phase )
$rootScope.$apply()
$$阶段是角度消化时
编辑:将$ rootScope.apply()更正为$ rootScope。$ apply()