Ошибка Angularjs [$ rootScope: inprog] inprogress

Я получаю 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 controller function.but, но не обновляю $scope.family_mem, а перейдя к части ошибки. это директива

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

Ответы

Ответ 1

Обычно это означает, что вы определили $rootScope. $применяются где-то вручную внутри другого кода angular, который уже имеет жизненный цикл. Это не должно происходить в обычных случаях, так как angular отслеживает сам жизненный цикл. Один общий случай, когда это необходимо, - это когда вам нужно обновить область из кода angular (например, 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);