rootScope更新时出错

时间:2014-11-12 09:53:06

标签: javascript angularjs

我有一个更新$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

2 个答案:

答案 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()