디렉티브 테스트에서 $ apply 대 $ digest
범위에있는 특정 속성의 상태에 응답하는 지시문이 있고 테스트에서 해당 속성을 변경하고 올바르게 응답하는지 확인하려는 경우 변경을 수행하는 가장 좋은 방법은 무엇입니까?
이 두 패턴을 모두 보았습니다.
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
'Programing' 카테고리의 다른 글
RuntimeException : 응용 프로그램을 인스턴스화 할 수 없습니다. (0) | 2020.08.25 |
---|---|
int가 null인지 확인하는 방법 (0) | 2020.08.25 |
Conda가 기본 환경을 기본적으로 활성화하지 못하도록하려면 어떻게해야합니까? (0) | 2020.08.25 |
Ruby에서 주석 차단 (0) | 2020.08.25 |
ImportError : Windows에 site라는 모듈이 없습니다. (0) | 2020.08.25 |