AngularJS:清除$ watch

2020/10/07 17:01 · javascript ·  · 0评论

我的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;
本文地址:http://javascript.askforanswer.com/angularjsqingchu-watch.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇: 链接时如何显示确认对话框?
下一篇:

评论已关闭!