programing

$ digest 사이클을 부를 때?

powerit 2023. 10. 10. 21:16
반응형

$ digest 사이클을 부를 때?

다이제스트 사이클이 발생할 때 매우 혼란스럽습니다. 50ms마다 타이머를 기반으로 주기적으로 호출됩니까(여기에 쓰여 있고 여기에 암시되어 있음) 아니면 각도 컨텍스트에 들어오는 모든 이벤트 후에 호출됩니까(여기, 여기, 여기에 쓰여 있음)?

문제가 있는 경우의 예:

제 모델에는 다음과 같은 변수가 있습니다.myVar3의 값으로제 HTML에는, 나는{{myvar}}. 버튼 클릭과 같은 이벤트가 발생하면 컨트롤러에서 핸들러가 발생하며 핸들러 내부의 코드는 다음과 같습니다.

$scope.myVar = 4;
// some heavy actions takes place for 3 seconds...
$scope.myVar = 5;

UI 스레드가 차단되지 않았다고 가정하면 버튼 클릭 후 사용자는 무엇을 볼 수 있습니까? 5개만 볼 수 있습니까? 아니면 4개, 3초 후 5개를 볼 수 있습니까?

http://blog.bguiz.com/post/60397801810/digest-cycles-in-single-page-apps 에 있는 다이제스트 사이클에 대한 설명은 다음과 같습니다.

간격을 두고 실행되는 코드

아주 오해의 소지가 있고, 솔직히 말하면 앵귤러를 언급할 때는 틀렸다고 할 수도 있습니다.Pawel Kozlowski의 말을 인용하자면, AngularJS로 웹 애플리케이션 개발을 마스터링하는 것입니다.

AngularJS는 모델 변경 사항을 주기적으로 확인하기 위해 어떤 종류의 폴링 메커니즘도 사용하지 않습니다.

폴링이 없다는 것을 증명하기 위해, 템플릿이 있는 경우

<p>{{state}}</p>

의 컨트롤러 코드

$scope.state = 'Initial';
// Deliberately *not* using $timeout here
$window.setTimeout(function() {
  $scope.state = 'Changed';
},1000);

이 플렁커에서와 같이, 사용자에게 보여지는 문자열은 다음과 같이 유지됩니다.Initial그리고 절대로 변하지 않을 것입니다.Changed.

전화가 자주 오는 이유가 궁금하다면$apply, 그러나 항상 그렇지는 않습니다. 그것은 아마도 Angular와 함께 오는 다양한 지시사항들 때문일 것입니다.ngClick아니면ngChange부르겠습니다$apply그들 자신이 그 사이클을 촉발할 겁니다네이티브 JS 이벤트를 직접 듣는 이벤트 청취자는 이것을 하지 않을 것이므로 의도적으로 전화를 해야 합니다.$apply변경 사항을 템플릿에 반영할 수 있습니다.

각도 컨텍스트의 일부로 다음 중 하나가 발생하면 다이제스트 프로세스가 시작됩니다.

  • DOM 이벤트(ng-click 등)
  • 콜백($http 등)이 있는 Ajax
  • 콜백($타임아웃 등)이 있는 타이머
  • $apply, $
  • 기타.

정상적인 브라우저 관련 DOM 이벤트(클릭 등) 및 setTimeout은 "Angular Context"에서 작동하므로 다이제스트 프로세스를 트리거하지 않습니다.

저는 다음으로부터 위의 내용을 배웠습니다.

위의 내용은 https://www.youtube.com/watch?v=SYuc1oSjhgY 에서 확인할 수 있는 매우 상세한 튜토리얼의 빠른 스냅샷입니다.

임의 각도외부(ajax 포함)에서 JS 범위 변수를 처리할 경우 $apply()가 필요합니다.

setTimeout입니다 입니다.$apply하는 데 rjs는합니다.

$timeout는 약속을 반환하고 현재 범위를 관리하며 동일한 다이제스트 주기로 실행되는 angularjs 함수입니다.

그러니 그럴 필요는 없습니다.$apply()값을 업데이트하는 함수입니다.

언급URL : https://stackoverflow.com/questions/23460025/when-digest-cycle-is-called

반응형