programing

Angular는 어떻게 알아?JS를 "갱신"하다

magicmemo 2023. 3. 2. 22:10
반응형

Angular는 어떻게 알아?JS를 "갱신"하다

커스텀 디렉티브 범위 밖에서 발생하는 클릭 이벤트가 있기 때문에 "ng-click" 속성을 사용하는 대신 jQuery.click() 리스너를 사용하여 다음과 같이 스코프 내의 함수를 호출합니다.

$('html').click(function(e) {
  scope.close();
);

close()는 다음과 같은 단순한 함수입니다.

scope.close = function() {
  scope.isOpen = false;
}

제 견해로는 다음과 같이 "ng-show"가 isOpen으로 결합되어 있는 요소가 있습니다.

<div ng-show="isOpen">My Div</div>

디버깅 시 close()가 호출되고 isOpen이 false로 갱신되고 있지만 Angular가JS 보기가 업데이트되지 않습니다.Angular에게 수동으로 뷰를 업데이트하도록 지시할 수 있는 방법이 있습니까?아니면 이 문제를 해결하기 위해 제가 보지 못하는 더 많은 "각적" 접근법이 있을까요?

해결책은 전화하는 것이었다.

$scope.$apply();

내 jQuery 이벤트 콜백에서.

★★★★$apply★★★★★★★★★★★★★★★★★?

TL;DR:$apply는 Angular 월드 외부에서 변경된 내용을 적용하려는 경우 호출되어야 합니다.


@더스틴업데이트하기 위해 $apply가 정확히 어떤 역할을 하는지, 동작하는지에 대해 설명합니다.

$apply()Angular에서 식을 실행하는 데 사용됩니다.각도 외부에서 JSJS 프레임워크(예: 브라우저 DOM 이벤트, setTimeout, XHR 또는 서드파티 라이브러리).왜냐면 우린 Angular를 불러서JS 프레임워크 예외 처리, 감시 실행적절한 범위의 라이프 사이클을 수행해야 합니다.

Angular를 사용하면 모든 값을 바인딩 대상으로 사용할 수 있습니다.그런 다음 JavaScript 코드 턴이 끝나면 값이 변경되었는지 확인합니다. 변경되었는지 이인 '바인딩'이 .$scope.$digest()직접 전화하는 일은 거의 없습니다1.$scope.$apply()을 (이것을)라고 부르게 됩니다.$scope.$digest를 참조해 주세요.

는 Angular 식및 Angular 합니다.$watch그래서 컨텍스트 에서 모델을 에는 Angular를 호출해야 .$scope.$apply()이러한 변경이 전파되지 않으면 Angular는 변경되었음을 알지 못하기 때문에 바인딩이2 업데이트되지 않습니다.

사용하다

$route.reload();

않고 $route컨트롤러에 접속합니다.

다음 사항이 효과가 있었지만,

$scope.$apply();

더 모두의 했습니다..$on ★★★★★★★★★★★★★★★★★」.$broadcast을 하다$.watch.

하지만, 다음은 훨씬 적은 코드를 필요로 했고 마법처럼 작동했습니다.

$timeout(function() {});

업데이트 직후의 시간 초과를 스코프 변수에 추가하면 Angular가 허용됨JS는 업데이트가 있음을 깨닫고 스스로 적용합니다.

언급URL : https://stackoverflow.com/questions/12304728/how-can-i-tell-angularjs-to-refresh

반응형