$$단계는 AngularJS로 무엇입니까?
누군가 부트스트랩 모달에 쓴 각도 지시문의 일부인 코드 조각을 찾았어요
//Update the visible value when the dialog is closed
//through UI actions (Ok, cancel, etc.)
element.bind("hide.bs.modal", function () {
scope.modalVisible = false;
if (!scope.$$phase && !scope.$root.$$phase)
scope.$apply();
});
이 부분은 hide.bs.modal 이벤트에 바인드하고 UI가 변경되면 modal을 업데이트 하는 양방향 바인딩의 후반부를 위한 것으로 알고 있습니다.
왜 $$단계에서 범위와 rootScope를 체크한 후 Apply를 호출하는지 알고 싶습니다.
지금 바로 신청하면 안 되나요?
여기서 $$단계는 무엇입니까?
많이 찾아봤지만 좋은 설명을 찾을 수가 없었어요.
편집:
예시를 본 곳은 다음과 같습니다. 부트스트랩모달의 심플 앵귤러 디렉티브
$$phase
가 angular 일 때 입니다.$digest
cycle. cycle cycle cycle cycle cycle cycle cycle cycle cycle cycle.
( 체크하고 가 있어요.$$phase
하기 $apply
을 오류가 발생합니다.$apply
a $digest
:
오류: $apply가 이미 진행 중입니다.
다이제스트 사이클 중에 각이 지는 깃발이라는 게 데이빈 말이 맞아요.
하지만 코드에 사용하지 마세요.
최근에 Misko(각도 작성자)에게 $$ 단계에 대해 물어봤더니, 그는 절대 사용하지 말라고 했다. 다이제스트 사이클의 내부 구현이기 때문에 미래에 안전하지 않다.
향후에도 코드가 계속 기능하도록 하기 위해, 그는 $타임아웃 기간 내에 "안전한 적용"을 원하는 모든 것을 포장할 것을 제안했습니다.
$timeout(function() {
// anything you want can go here and will safely be run on the next digest.
})
콜백 등의 다이제스트 사이클 중에 해결할 수 있는 일이 있을 때 자주 발생합니다(다만, 항상 그렇지는 않습니다).
다음은 제가 구글 라이브러리 중 하나를 다룰 때의 일례입니다. (이 서비스가 제공되었던 나머지 서비스는 중단되었습니다.
window.gapi.client.load('oauth2', 'v2', function() {
var request = window.gapi.client.oauth2.userinfo.get();
request.execute(function(response) {
// This happens outside of angular land, so wrap it in a timeout
// with an implied apply and blammo, we're in action.
$timeout(function() {
if(typeof(response['error']) !== 'undefined'){
// If the google api sent us an error, reject the promise.
deferred.reject(response);
}else{
// Resolve the promise with the whole response if ok.
deferred.resolve(response);
}
});
});
});
$timeout의 delay 인수는 옵션이며 설정되지 않은 상태로 두면 기본값0이 됩니다(지연이 설정되어 있지 않으면 기본값이 0이 됩니다).
조금 직감적이지 않지만, Angular라는 글쓴이의 답변이니까, 난 그걸로 충분해!
이 예에서는 요소 바인딩이 비각형 이벤트에서 실행됩니다.합니다.$apply()
위상을 체크하지 않고.
를 보면, 「 」라고 하는 이 있습니다.$scope
function함수라고 하는 showModal()
이 함수는 "hide.bs.modal" 이벤트가 발생할 수 있는 비모듈 코드를 호출합니다.통해 가 발생했을 은 '1'에 있습니다.$digest
따라서 이 이벤트는 각도 관리 코드와 비 각도 코드 모두에서 호출되는 함수의 드문 경우에 해당됩니다. 중$$phase
이 경우 이벤트가 어떻게 발생했는지 모르기 때문에 필요합니다. 경우,$$phase
되고 다이제스트 루프가 됩니다.$apply()
호출할 필요가 없습니다.
스코프를 소화할 때나 적용할 때 사용하는 것이 좋은 것으로 알고 있습니다.truthy일 경우 현재 $digest 또는 $apply 단계가 진행 중임을 의미합니다.관련 오류가 발생할 경우 $scope를 실행할 수 있습니다.$$phase | $diag.diag(); $diages가 다이제스트 되는 것은 $diages뿐입니다.$pahse는 가짜입니다.
하시면 됩니다.$scope.$evalAsync()
합니다.$scope.$apply()
$$phase
는 @substorbust에 의해 됩니다.
최근에 Misko(각도 작성자)에게 $$ 단계에 대해 물어봤더니, 그는 절대 사용하지 말라고 했다. 다이제스트 사이클의 내부 구현이기 때문에 미래에 안전하지 않다.
★★★★★의 $scope.$evalAsync()
원하는 것을 얻을 수 있고, 다이제스트 사이클에 따라 새로운 데이터를 얻을 수 있습니다.이것에 의해, $120보다 고속으로 얻을 수 있습니다.
지금까지 delferred-$digest-incallation에 대한 접근법은 $scope를 대체하는 것이었습니다.$delay() 서비스(지연 후 암묵적으로 $delay()를 호출함)를 사용하여 $delay()를 호출합니다.하지만 어제 $scope를 발견했어요.$evalAsync() 메서드.이 두 가지 모두 동일한 작업을 수행합니다. 즉, 표현식 평가를 이후 시점까지 연기합니다.하지만, $scope.$evalAsync()는 JavaScript 이벤트루프와 같은 틱으로 실행될 가능성이 있습니다.
사용법은 매우 간단합니다.
$scope.$evalAsync(
function() {
// Call some method here OR
$scope.excutemyMethod();
// assign some value;
$scope.someVariable = "asd"
}
);
「 」의 .$evalAsync()
는 비동기 큐에 추가되므로 내부 트리거링에 의해 다음 다이제스트사이클에서 실행할 수 있습니다.
, 「」도 포함되어 있습니다.$timeout
비동기 큐의 길이를 감시하고 비동기 큐의 작업을 대기하여 가능한 한 빨리 기능을 실행 사이클에 넣기 위한 드문 시나리오를 처리하기 위한 콜입니다.이 사실을 설명하는 Ben Nadel 블로그를 참조하십시오.
언급URL : https://stackoverflow.com/questions/20263118/what-is-phase-in-angularjs
'programing' 카테고리의 다른 글
HTML로 JSON 표시 (0) | 2023.02.25 |
---|---|
리액트 라우터 v4에서 버튼 클릭을 통해 경로를 탐색하는 방법 (0) | 2023.02.25 |
ASP에 대한 각도Net WebApi, 서버에 CSRF 구현 (0) | 2023.02.25 |
Wordpress에서 Gutenberg 블록 카테고리를 나열, 정렬 또는 조작하는 방법 (0) | 2023.02.25 |
오라클에서 SELECT 쿼리를 사용하여 빈 열/빈 열을 생성하는 방법은 무엇입니까? (0) | 2023.02.25 |