我在我的AngularJS应用程序中有一个手表函数。
$scope.$watch('quartzCrystal', function () {
...
}
但是,在某些条件之后(在我的例子中,在我的单页应用程序中更改页面),我想停止该监视(就像清除超时一样)。
我该怎么做呢?
我在我的AngularJS应用程序中有一个手表函数。
$scope.$watch('quartzCrystal', function () {
...
}
但是,在某些条件之后(在我的例子中,在我的单页应用程序中更改页面),我想停止该监视(就像清除超时一样)。
我该怎么做呢?
当前回答
范围。$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。
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 = [];
有时候你的$watch是动态调用的,它会创建它的实例,所以你必须在你的$watch函数之前调用注销函数
if(myWatchFun)
myWatchFun(); // it will destroy your previous $watch if any exist
myWatchFun = $scope.$watch("abc", function () {});
范围。$watch返回一个函数,你可以调用它来注销手表。
喜欢的东西:
var unbindWatch = $scope.$watch("myvariable", function() {
//...
});
setTimeout(function() {
unbindWatch();
}, 1000);
$watch返回一个注销函数。调用它将注销$watcher。
var listener = $scope.$watch("quartz", function () {});
// ...
listener(); // Would clear the watch