programing

$rootScope에서 $apply 실행과 다른 범위 실행

abcjava 2023. 4. 1. 08:06
반응형

$rootScope에서 $apply 실행과 다른 범위 실행

$apply다음과 같은 모든 범위에서 실행할 수 있습니다.$rootScope.

로컬 스코프에서 실행하거나 로컬 스코프에서 실행하거나$rootScope?

제가 물어본 이유는 주어진 기능을 랩하는 도우미 기능을 만들고 싶기 때문입니다.$apply그러기 위해서는 항상 스코프를 통과해야 합니다.A) 귀찮고 B) 로컬 스코프가 없기 때문에 쉽지 않습니다.

도우미 기능 호출을 항상 받고 싶습니다.$apply에서$rootScope하지만 그렇게 하는 데 위험이 있다면 안 돼요

입니다.$apply어떤 범위에서도 항상 결과가 된다$rootscope.$digest차이가 있을 수 있는 유일한 경우는 식을 인수로 제공하는 경우입니다.$apply표현식은 현재 범위(vs.$rootScope) 단, 이후$rootscope.$digest항상 호출됩니다.

소스 코드는 매우 명확합니다.rootScope.js

결론:전화하시면$apply논쟁도 안 하고, 별 차이도 없어요.

실행하는 다른 이유$apply에서$rootScope대신$scope보통 제가 전화해야 할 때 저를 찾아온다.$apply다른 컨트롤러, 즉 다른 범위에 의해 사용되는 서비스에서 사용됩니다.
이 경우, 나는 주사하는 것을 선호한다.$rootScope앞으로 어떤 범위를 사용할지 신경 쓰지 않고 $120을 호출합니다.

특정 범위에서 $digest/$apply를 실행하면 깊이 우선 트래버설을 사용하여 다른 모든 범위를 방문합니다.

https://github.com/angular/angular.js/blob/3967f5f7d6c8aa7b41a5352b12f457e2fbaa251a/src/ng/rootScope.js#L550-L558

즉, 유일한 차이점은 $digest가 $scope에서 호출된 $scope에서 시작된다는 것입니다.

/* What happens with $apply */ 
angular.module('myApp',[]).controller('MessageController', function($scope) {
    
      $scope.getMessage = function() {
        setTimeout(function() {
          $scope.$apply(function() {
            //wrapped this within $apply
            $scope.message = 'Fetched after 3 seconds'; 
            console.log('message:' + $scope.message);
          });
        }, 2000);
      }
      
      $scope.getMessage();
    
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<body ng-app="myApp">
      <div ng-controller="MessageController">
        Delayed Message: {{message}}
      </div>  
    </body>

언급URL : https://stackoverflow.com/questions/17868889/running-apply-on-rootscope-vs-any-other-scope

반응형