Wie höre ich auf, in AngularJS $ zu schauen?

76

Ich kann eine $ watch für einen AngularJS-Bereich einrichten, um benachrichtigt zu werden, wenn sich der Ausdruck, an dem ich interessiert bin, geändert hat. Aber wie höre ich auf zu schauen, wenn ich das Interesse verliere?

Thilo
quelle

Antworten:

143

Beim Aufruf wird $watcheine Funktion zurückgegeben, die die Registrierung des gebundenen Ausdrucks aufhebt.

Um zu sehen, wie sich eine Variable foonur einmal ändert:

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

Hoffentlich hilft das :-)

Golo Roden
quelle
14
Nur um es klar zu machen: Im obigen Beispiel wird der Rückruf "Registrierung aufheben" aus der Überwachungsfunktion selbst heraus aufgerufen. Dies muss nicht der Fall sein, und Code an anderer Stelle in der App (dh außerhalb der Überwachungsfunktion) kann ihn gerne aufrufen, um sicherzustellen, dass die Überwachungsfunktion nie wieder aufgerufen wird.
entscheidet
15
Noch ein Hinweis: Wenn Sie eine Uhr registrieren, wird sie sofort und jedes Mal, wenn sich der Wert ändert, erneut ausgeführt. Der genaue obige Code führt die Watcher-Funktion also einmal aus und hebt sie dann ab, bevor sie auf Änderungen in reagiert foo. Ein bisschen abseits des Themas, aber ich dachte, es ist erwähnenswert.
MW.
21

Als zusätzlicher Kommentar, aber nicht als Antwort - dies ist das gleiche Prinzip, um auch Event-Listener zu töten.

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

Nur eine Ergänzung, von der ich dachte, dass sie für alle anderen cool wäre ...

Sten Muchow
quelle