2015-02-04 7 views
41

Wann sollte ich angular $watch Funktionen verwenden und wenn ng-change angularjs directive? Für mich können beide dasselbe tun.

Gibt es Unterschiede oder Nutzungsmuster zwischen ihnen?

+0

$ watch und ng-change macht ungefähr dasselbe, aber ihre Anwendungsfälle sind unterschiedlich. – Ved

+1

Die $ watch überprüft die Werte (alt und neu) und vergleicht sie jedes Mal, wenn etwas den Angular $ Digest-Zyklus auslöst. Die Verwendung von ng-change macht ungefähr dasselbe, aber ich glaube, es ist syntaktisch korrekter zu verwenden. –

+0

Eine andere Frage ziemlich ähnlich: http://stackoverflow.com/questions/19007281/angular-trigger-changes-with-watch-vs-ng-change-ng-checked-etc – Qianyue

Antwort

89

Sie sind nicht die gleichen, klar. Einer wird ausschließlich in der Steuerung verwendet; der andere ist eine Direktive für ein Eingabeelement.

Aber auch in ihrer Anwendung unterscheiden sie sich.

Wenn Sie $watch verwenden, wird der überwachte Ausdruck bei jedem Digest-Zyklus ausgewertet, und bei einer Änderung wird der Handler aufgerufen.

Mit ng-change wird der Handler explizit als Reaktion auf ein Ereignis aufgerufen.

Mit $watch kann Änderung von überall kommen: Benutzeraktion, Controller-Funktion, Service - alle werden den Handler auslösen.

Mit ng-change ist die Änderung auf eine Benutzeraktion für ein bestimmtes Eingabeelement beschränkt.

Es lohnt sich auch zu beachten, dass ng-change mit ng-modelnur in Kombination funktioniert - in anderen Worten, die ng-change Ausdruck nur ausgewertet, wenn ngModel.$viewValue (auf ngModelController Dokumentation für weitere Informationen) geändert wird, die in Reaktion geschieht in der Regel zu einem benutzerinitiierten Ereignis.

+0

Ich denke, das ist eine bessere Antwort. – Sam

+0

Ich sehe jetzt, das war sehr nützlich, danke. – levi

Verwandte Themen