본문 바로가기

목록이 없습니다.

[AngularJS] $apply 이미 실행중 ($apply already in progress)

Framework/AngularJS

    AngularJS를 사용하다가 보면 어떤 경우에는 $scope.$apply 함수를 사용해주어야 위의 로직에서 변경한 변수들이 제대로 적용되는것을 볼 수 있습니다. 어떤 경우에 $apply함수가 자동으로 동작하지 않고 어떤 경우에 자동으로 동작하는지는 아직 파악이 되지 않지만 보통 directive에서 상속받은 scope의 변수들을 변경했을 경우 $apply 함수가 자동으로 동작하지 않는 것을 자주 봐왔습니다. 그런데 어느 날 directive를 구현하는데 어떤 경우에는 $apply 가 이미 동작중이라는 오류 메시지가 보이는 것 ($apply already in progress). 찾아보니 이 문제를 해결할 수 있는 방법이 있었습니다.

     


     

    해결방법

     

    if ($scope.$$phase !== '$apply' && $scope.$$phase !== '$digest') {
    	$scope.$apply(function() {
        	...
        });
    }

     

    위와같이 $$phase라는 변수를 가져와서 조건을 걸어주면 됩니다. $$phase 변수는 $apply나 $digest가 실행중인지 여부를 담고 있는 것 같습니다.