标签归档:$apply

$digest already in progress 解决办法

常见原因

除了简单的不正确调用 $apply$digest,有些情况下,即使没有犯错,也有可能得到这个错误。

可能出错的代码

function MyController($scope, thirdPartyComponent) {
  thirdPartyComponent.getData(function(someData) {
    $scope.$apply(function() {
      $scope.someData = someData;
    });
  });
}

改成这样就可以了

function MyController($scope, thirdPartyComponent) {
  thirdPartyComponent.getData(function(someData) {
    $timeout(function() {
      $scope.someData = someData;
    }, 0);
  });
}

在AngularJS的使用$apply更新model

先看一个不能work的

如果ng-app和ng-controller写在一个dom里,这样就不能更新model里的值
分开写就没问题
解决这个问题可以这样:

当然也可以这样:

function Ctrl($scope) {
  $scope.message = "Waiting 2000ms for update";
    setTimeout(function () {
        $scope.message = "Timeout called!";
        $scope.$apply();
    }, 2000);
}