[javascript] AngularJS : $ watch 지우기
AngularJS 응용 프로그램에 시계 기능이 있습니다.
$scope.$watch('quartzCrystal', function () {
...
}
그러나 어떤 조건 (예 : 단일 페이지 응용 프로그램 에서 페이지 변경) 후에 시간 초과를 지우는 것처럼 시계를 중지하고 싶습니다.
어떻게해야합니까?
답변
$watch
등록 해제 함수를 반환합니다. 호출하면의 등록이 취소 $watcher
됩니다.
var listener = $scope.$watch("quartz", function () {});
// ...
listener(); // Would clear the watch
답변
scope. $ watch는 호출 할 수 있고 시계 등록을 취소하는 함수를 반환합니다.
다음과 같은 것 :
var unbindWatch = $scope.$watch("myvariable", function() {
//...
});
setTimeout(function() {
unbindWatch();
}, 1000);
답변
문제가 발생한 직후에 취소하려면 콜백 내부의 시계를 지울 수도 있습니다. 그렇게하면 $ watch는 사용될 때까지 활성화 상태를 유지합니다.
이렇게 …
var clearWatch = $scope.$watch('quartzCrystal', function( crystal ){
if( isQuartz( crystal )){
// do something special and then stop watching!
clearWatch();
}else{
// maybe do something special but keep watching!
}
}
답변
언젠가 $ watch가 호출 dynamically
하고 인스턴스를 생성하므로 함수 전에 등록 취소 함수를 호출해야 $watch
합니다.
if(myWatchFun)
myWatchFun(); // it will destroy your previous $watch if any exist
myWatchFun = $scope.$watch("abc", function () {});
답변
이상적으로는 스코프를 벗어날 때 모든 사용자 정의 시계를 제거해야합니다.
더 나은 메모리 관리 및 더 나은 앱 성능 향상에 도움이됩니다.
// call to $watch will return a de-register function
var listener = $scope.$watch(someVariableToWatch, function(....));
$scope.$on('$destroy', function() {
listener(); // call the de-register function on scope destroy
});
답변
감시자가 너무 많아서 모든 항목을 지워야하는 경우 배열로 밀어 넣고 모든 $watch
루프를 파괴 할 수 있습니다 .
var watchers = [];
watchers.push( $scope.$watch('watch-xxx', function(newVal){
//do something
}));
for(var i = 0; i < watchers.length; ++i){
if(typeof watchers[i] === 'function'){
watchers[i]();
}
}
watchers = [];
답변
감시자의 복사본을 폐기하려면 다음을 사용할 수 있습니다.
watchers = void 0;