web-dev-qa-db-ja.com

Angularjs [$ rootScope:inprog]進行中のエラー

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();
    }
  };
});
19
Nisham Mahsin

通常、これは、すでにライフサイクルが設定されている別のangularコード内のどこかに手動で$ rootScope。$ applyを定義したことを意味します。 angularはライフサイクル自体を追跡するため、これは一般的なケースでは発生しません。必要な一般的なケースの1つは、非角形コード(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
});
32

[$ rootScope:inprog]私の場合の進行中のエラー:
ケース1:これは、一度に2つのアクションを実行していることを意味します。

例:

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

$ timeoutを使用して、2つのアクション(関数)が同時に実行されていないことを確認します。

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

ケース2:アクションが完全に実行されていません。
$ timeoutを使用して、最初のアクションが実行されたことを確認します。

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