Angularjs [$rootScope:inprog] inprogress error

我收到angularjs [$rootScope:inprog]错误。

Error: [$rootScope:inprog] http://errors.angularjs.org/1.2.7/$rootScope/inprog?p0=%24digest.

这是函数调用

 Members.get({}, function (response) { // success
   $scope.family_mem = response.data;    
  }, function (error) { // ajax loading error

    Data.errorMsg(); // display error notification
  });

在控制台中,我通过php控制器函数获得结果,但不更新而是转到错误部分。$scope.family_mem

myApp.directive('mySelect', function() {
  return{
    restrict: 'A',
    link: function(scope, element){
      $(element).select2();
    }
  };
});

答案 1

通常,这意味着您在另一个已经具有生命周期的角度代码中的某个位置手动定义了$rootScope.$apply。这在常见情况下不应该发生,因为角度跟踪生命周期本身。需要它的一个常见情况是当你需要从非角度代码(如jquery或老式的js东西)更新范围时。因此,请检查您是否在某个地方有此内容。如果您确实需要,最好使用安全应用(常见代码片段):

angular.module('main', []).service('scopeService', function() {
     return {
         safeApply: function ($scope, fn) {
             var phase = $scope.$root.$$phase;
             if (phase == '$apply' || phase == '$digest') {
                 if (fn && typeof fn === 'function') {
                     fn();
                 }
             } else {
                 $scope.$apply(fn);
             }
         },
     };
});

然后,您可以注入此服务并通过以下方式进行必要的调用:

scopeService.safeApply($rootScope, function() {
    // you code here to apply the changes to the scope
});

答案 2

[$rootScope:inprog] 在我的情况下,inprogress 错误:
案例 1:这意味着您一次执行两个操作。

例:

goView();
hidePopOver(); //Will trigger error

使用$timeout可确保两个操作(函数)未同时运行。

goView();
$timeout(function () {
    hidePopOver();
}, 300);

情况 2:操作尚未完全执行。
使用$timeout确保已执行第一个操作。

$timeout(function () {
    $(element.target).trigger('click');
}, 300);