2014-03-29 5 views
16

angularjs [$ rootScope : inprog] 오류가 발생했습니다.

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

내가 대신 일부 에러 것 $scope.family_mem를 업데이트하지 function.but PHP는 컨트롤러에 의해 결과를 얻고 콘솔

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

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

호출하는 기능입니다. 이 보통이 당신이 $ rootScope을 정의한다는 것을 의미 지시어

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

피들을 추가 할 수 있습니까? –

+0

나는 당신이 축소 된 angularjs 소스 코드를 사용하고 있다고 생각합니다. 'angular.min.js' 대신'angular.js'를 사용하면 오류에 대한 자세한 정보를 얻을 수 있습니다. –

+0

angular.js를 사용하여 진행중인 다이제스트 오류 –

답변

26

입니다. $ 이미 수명주기를 가지고 다른 각도 코드의 내부 어딘가에 수동으로 적용됩니다. 각도가 수명주기를 추적하기 때문에 일반적인 경우에는 발생하지 않아야합니다. 하나의 일반적인 경우는 비 앵귤러 코드 (예 : 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 
}); 
+0

데이터베이스의 특정 양의 데이터에 대해 오류가 표시되지 않습니다. 한계 이후에는 오류 –

+0

이 표시됩니다. 나는 문제가 서버 쪽과 함께있을 수 있지만 논리를 처리 할 때 언급 한 오류가 또 다른 오류라고 생각하십니까? 어디에서 오류가 발생 했습니까? Data.errorMsg()? 다른 곳? –

+0

진행 중 오류가 발생한 위치를 알지 못합니다. 그러나 Data.errorMsg()는 다른 오류를 보여줍니다. –

4

[$의 rootScope : inprog] 내 경우의 진행 오류 :
사례 1 : 이것은 한 번에 두 가지 동작을 수행하고 있음을 의미합니다.

예 :

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

사용 $ 제한 시간 확실히 두 가지 작업 (기능) 동시에 실행하지 않는 확인합니다.

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

사례 2 : 작업이 완전히 실행되지 않았습니다.
첫 번째 작업이 실행되었는지 확인하려면 $ timeout을 사용하십시오.

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