AngularJS: Clear $ watch

J'ai une fonction de surveillance dans mon application AngularJS.

$scope.$watch('quartzCrystal', function () { ... } 

Cependant, après une certaine condition (dans mon exemple, changer la page dans mon application à une seule page ), je souhaite arrêter cette montre (comme un délai de suppression).

Comment puis je faire ça?

$watch retourne une fonction de désenregistrement. L'appeler serait désenregistrer l' $watcher .

 var listener = $scope.$watch("quartz", function () {}); // ... listener(); // Would clear the watch 

Scope. $ Watch renvoie une fonction que vous pouvez appeler et qui annulera la montre.

Quelque chose comme:

 var unbindWatch = $scope.$watch("myvariable", function() { //... }); setTimeout(function() { unbindWatch(); }, 1000); 

Vous pouvez également effacer la montre à l'intérieur du rappel si vous souhaitez l'effacer juste après que quelque chose arrive. De cette façon, votre montre $ restera active jusqu'à son utilisation.

Ainsi…

 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! } } 

Un certain temps que votre montre $ appelle dynamically et il créera ses instances afin que vous deviez appeler la fonction de désenregistrement avant votre fonction de $watch

 if(myWatchFun) myWatchFun(); // it will destroy your previous $watch if any exist myWatchFun = $scope.$watch("abc", function () {}); 

Si vous avez trop de vigilants et que vous devez les effacer, vous pouvez les mettre dans un tableau et détruire chaque montre $ en boucle.

 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 = []; 

Pour éliminer la copie des observateurs, vous pouvez utiliser ceci:

 watchers = void 0;