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;