Angularjs 전역 변수가 역할 영역에 의해 감청되는 올바른 자세
$scope.$watch($rootScope.xxx,function(newVal,oldVal){
//do something
})
왜 아니냐고 물어보시더라고요.
$rootScope.$watch("xxx",function(newVal,oldVal){
//do something
})
최근의 버그로 말하자면 왜 첫 번째 방식을 사용해야 합니까?
논리는 그림과 같다. 처음에 나는 $rootScope.$를 사용했다.watch의 작법.angularjs가 $rootScope에 있는 watch가 전역적으로 등록되면 유효하기 때문입니다.나의 이 전역 변수는 마침 주문 정보이다. 즉, 서로 다른 컨트롤러가 그에게 변동이 있다. 매번 변동할 때마다 $rootScope.$를 촉발한다.watch는 다른 컨트롤러에 들어갑니다.$rootScope의 $broadcast를 비교해 보면 전역적으로 출발합니다.
사실 이것은 유일한 방법이 아니다. angular 원본을 찾아보면 watch 방법의 원본을 찾을 수 있다.
return function deregisterWatch() {
if (arrayRemove(array, watcher) >= 0) {
incrementWatchersCount(scope, -1);
}
lastDirtyWatch = null;
};
이 코드는 수동으로watch를 청소하는 것이 가능하다는 것을 알려준다.예:
var watcher = $rootScope.$watch("xxx",function(){});
// watcher
watcher();
그래도 간단하죠? 위의 방법도 scope의watch에 사용할 수 있습니다.
여기까지 연구할 때 문제가 있다고 생각했는데 $scope에서 정리될까요?그래서 휴, 계속 원본 코드를 넘기면 $destroy 방법에서 다음과 같은 코드를 찾을 수 있습니다.
// Disable listeners, watchers and apply/digest methods
this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
this.$on = this.$watch = this.$watchGroup = function() {
return noop;
};
this.$$listeners = {};
상기 코드는 본고에서 여러분께 소개한 Angularjs 전역 변수가 작용역에 의해 감청되는 정확한 자세입니다. 여러분의 도움이 있기를 바랍니다. 본고가 잘 쓰지 못했으니 협객 여러분의 많은 지도를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.