$ digest 사이클을 부를 때?
다이제스트 사이클이 발생할 때 매우 혼란스럽습니다. 50ms마다 타이머를 기반으로 주기적으로 호출됩니까(여기에 쓰여 있고 여기에 암시되어 있음) 아니면 각도 컨텍스트에 들어오는 모든 이벤트 후에 호출됩니까(여기, 여기, 여기에 쓰여 있음)?
문제가 있는 경우의 예:
제 모델에는 다음과 같은 변수가 있습니다.myVar
3의 값으로제 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
'programing' 카테고리의 다른 글
IIS7: HTTP->HTTPS 클린 (0) | 2023.10.10 |
---|---|
AJAX MVC 4를 사용하여 드롭다운 목록 채우기 (0) | 2023.10.10 |
C 및 C++ 개발을 위한 Eclipse의 대안? (0) | 2023.10.10 |
docker. sock 권한이 거부되었습니다. (0) | 2023.10.10 |
csc.exe 파일이 포함된 smarterasp.net 에 웹사이트를 게시하는 데 문제가 있습니까? (0) | 2023.10.10 |