我在我的AngularJS应用程序中有一个手表函数。
$scope.$watch('quartzCrystal', function () {
...
}
但是,在某些条件之后(在我的例子中,在我的单页应用程序中更改页面),我想停止该监视(就像清除超时一样)。
我该怎么做呢?
我在我的AngularJS应用程序中有一个手表函数。
$scope.$watch('quartzCrystal', 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 unbindWatch = $scope.$watch("myvariable", function() {
//...
});
setTimeout(function() {
unbindWatch();
}, 1000);
如果你有太多的观察者,你需要清除所有的观察者,你可以将它们推入一个数组,并在循环中销毁每个$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 = [];
理想情况下,当你离开范围时,每个定制手表都应该被移除。
它有助于更好的内存管理和更好的应用程序性能。
// 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返回一个注销函数。调用它将注销$watcher。
var listener = $scope.$watch("quartz", function () {});
// ...
listener(); // Would clear the watch
如果你想在某些事情发生后立即清除它,你也可以在回调中清除手表。这样,你的$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!
}
}