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 ?
Réponses
Trop de publicités?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 :-)
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...
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 !