source

다이렉티브 테스트에서 $140 대 $140

lovecheck 2023. 2. 17. 21:37
반응형

다이렉티브 테스트에서 $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

반응형