75 votes

Comment arrêter $watching dans AngularJS ?

Je peux mettre en place un $watch sur un scope AngularJS pour être notifié lorsque l'expression qui m'intéresse a changé. Mais comment arrêter de regarder une fois que je n'ai plus d'intérêt ?

142voto

Golo Roden Points 10272

Lors de l'appel $watch une fonction qui désenregistre l'expression liée est renvoyée.

Par exemple, pour observer une variable foo ne changent qu'une seule fois :

var unregister = $scope.$watch('foo', function () {
  // Do something interesting here ...
  unregister();
});

J'espère que cela vous aidera :-)

21voto

Sten Muchow Points 1815

En guise de commentaire supplémentaire, mais pas de réponse, il s'agit du même principe pour tuer les récepteurs d'événements.

var unregister = $rootScope.$on("listen-for-something-cool", function($event, params) {
   //Do cool stuff with params, then kill it
   unregister();
};

Juste un ajout que j'ai pensé être intéressant pour les autres...

0voto

JOSEPH Blessingh Points 139

Je ne sais pas comment fonctionne la réponse acceptée ! Pour moi, elle ne fonctionnait pas du tout.

J'ai utilisé $watchCollection au lieu de $watch. J'ai ensuite essayé de le changer en $watch et j'ai appliqué la réponse acceptée mais je ne suis arrivé nulle part !

La seule chose qui a fonctionné pour moi a été :

var watchFoo = $scope.$watch('foo', function () {
  // Do something interesting here ...

    return;
});

retour ; n'enregistrait pas la montre et rompait le cycle de la montre. La montre a fonctionné correctement même après la rupture du cycle. Il était capable de détecter les changements effectués sur la matrice.

Mon code ressemblait à quelque chose comme :

var watchFoo = $scope.$watchCollection('foo', function (newFoo, oldFoo) {

     if(condition) {
         // Do something interesting here ...      
          return;
     } else {
         // Do something else here ...
     }

    });

La réponse acceptée peut être utilisée si elle vous convient, sinon cette réponse vous sera utile !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X