다이렉티브 테스트에서 $140 대 $140
스코프상의 특정 어트리뷰트의 상태에 응답하는 디렉티브가 있고 테스트에서 그 어트리뷰트를 변경하여 올바르게 응답하는 것을 확인하려면 어떤 방법이 가장 좋은 방법입니까?
난 두 가지 패턴을 모두 봐왔어
scope.$apply(function() {
scope.myAttribute = true;
});
그리고.
scope.myAttribute = true;
scope.$digest();
어떤 차이가 있고, 어떤 것이 더 낫고, 왜 더 나은가?
scope.$digest()
현재 범위 내에서 감시자들을 해고할 것이고, 그 모든 아이들에게도 해고할 것이다. scope.$apply
통과된 함수를 평가하고 실행합니다.$rootScope.$digest()
.
첫 번째는 현재 범위와 그 자녀에 대한 관찰자의 평가가 필요하기 때문에 더 빠르다.두 번째 것은 더 느립니다. 왜냐하면 그것은 관찰자를 평가해야 하기 때문입니다.$rootScope
아이 스코프밖에 없어요.
워처 중 하나에서 오류가 발생하여scope.$digest
, 를 통해 처리되지 않습니다.$exceptionHandler
서비스를 제공하므로 사용자가 직접 예외에 대처해야 합니다. scope.$apply
를 사용합니다.try-catch
내부적으로 차단하여 모든 예외를 넘기다$exceptionHandler
.
문서 자체에서 $digest 사이클은 언제든지 실행됩니다.$scope.$apply
범위에 관한 개발자 가이드에 따라
식을 평가한 후 $apply 메서드가 $digest를 수행합니다.$digest 단계에서는 스코프가 모든 $watch 식을 검사하여 이전 값과 비교합니다.
Scope API 매뉴얼에 따라
보통 컨트롤러나 디렉티브에서 $digest()를 직접 호출하지 않습니다.대신 $apply()(일반적으로 디렉티브 내에서)로 호출하면 $digest()가 강제로 지정됩니다.
그래서 당신은 명시적으로 전화해서는 안 된다.$digest
, 당신이 전화하고 있다$apply
메서드는 다이제스트 사이클을 트리거합니다.
언급URL : https://stackoverflow.com/questions/18697745/apply-vs-digest-in-directive-testing
'source' 카테고리의 다른 글
AngularJS 지시 전달 문자열 (0) | 2023.02.17 |
---|---|
WP_Widget의 호출된 컨스트럭터 메서드는 버전 4.3.0 이후 사용되지 않습니다. (0) | 2023.02.17 |
Facebook의 react.js 라이브러리 JSX 구문을 jslint로 잘 재생하려면? (0) | 2023.02.17 |
TypeScript skipLibCheck가 node_modules libs를 아직 검사하고 있습니다. (0) | 2023.02.17 |
React.js를 사용하여 속성이 있는지 확인합니다. (0) | 2023.02.17 |