$rootScope에서 $apply 실행과 다른 범위 실행
그$apply
다음과 같은 모든 범위에서 실행할 수 있습니다.$rootScope
.
로컬 스코프에서 실행하거나 로컬 스코프에서 실행하거나$rootScope
?
제가 물어본 이유는 주어진 기능을 랩하는 도우미 기능을 만들고 싶기 때문입니다.$apply
그러기 위해서는 항상 스코프를 통과해야 합니다.A) 귀찮고 B) 로컬 스코프가 없기 때문에 쉽지 않습니다.
도우미 기능 호출을 항상 받고 싶습니다.$apply
에서$rootScope
하지만 그렇게 하는 데 위험이 있다면 안 돼요
입니다.$apply
어떤 범위에서도 항상 결과가 된다$rootscope.$digest
차이가 있을 수 있는 유일한 경우는 식을 인수로 제공하는 경우입니다.$apply
표현식은 현재 범위(vs.$rootScope) 단, 이후$rootscope.$digest
항상 호출됩니다.
결론:전화하시면$apply
논쟁도 안 하고, 별 차이도 없어요.
실행하는 다른 이유$apply
에서$rootScope
대신$scope
보통 제가 전화해야 할 때 저를 찾아온다.$apply
다른 컨트롤러, 즉 다른 범위에 의해 사용되는 서비스에서 사용됩니다.
이 경우, 나는 주사하는 것을 선호한다.$rootScope
앞으로 어떤 범위를 사용할지 신경 쓰지 않고 $120을 호출합니다.
특정 범위에서 $digest/$apply를 실행하면 깊이 우선 트래버설을 사용하여 다른 모든 범위를 방문합니다.
즉, 유일한 차이점은 $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
'programing' 카테고리의 다른 글
babel-preset-es2015 모듈을 찾을 수 없습니다. (0) | 2023.04.01 |
---|---|
JsonNode를 ObjectNode로 변환하는 방법 (0) | 2023.04.01 |
오류 소스 옵션 1.5는 더 이상 지원되지 않습니다.1.6 이후 사용 (0) | 2023.04.01 |
경고: strpos(): ......wordpress 플러그인의 바늘이 비어 있습니다. (0) | 2023.04.01 |
왜 ng클릭이 필요하죠? (0) | 2023.04.01 |