Angenommen, Sie möchten etwas tun, wenn sich eine Eigenschaft von $scope
ändert. Und sagen Sie, dass diese Eigenschaft an ein input
Feld gebunden ist. Was sind die Vor-/Nachteile der Verwendung von $watch
im Vergleich zu ngChange
?
html
<input ng-model="foo" ng-change="increment()">
<p>foo: {{foo}}</p>
<!-- I want to do something when foo changes.
In this case keep track of the number of changes. -->
<p>fooChangeCount: {{fooChangeCount}}</p>
js
// Option 1: $watch
$scope.$watch('foo', function() {
$scope.fooChangeCount++;
});
// Option 2: ngChange
$scope.fooChangeCount = 0;
$scope.increment = function() {
$scope.fooChangeCount++;
};
http://plnkr.co/edit/4xJWpU6AN9HIp0OSZjgm?p=preview
Ich verstehe, dass es Zeiten gibt, wenn Sie verwenden müssen $watch
(wenn der Wert Sie suchen nach Uhr ist nicht an ein Eingabefeld gebunden). Und ich verstehe, dass es Zeiten gibt, in denen Sie ngChange
verwenden müssen (wenn Sie etwas als Reaktion auf eine Änderung in einer Eingabe vornehmen möchten, aber nicht unbedingt als Reaktion auf eine Bereichseigenschaftsänderung).
In diesem Fall erreichen beide jedoch das gleiche.
Meine Gedanken:
ngChange
scheint sauberer und leichter zu verstehen, was passiert.$watch
scheint es könnte etwas schneller sein, aber wahrscheinlich vernachlässigbar. MitngChange
denke ich, dass Angular in der Kompilierphase einige zusätzliche Arbeit leisten müsste, um die Ereignis-Listener einzurichten, und vielleicht verringern zusätzliche Ereignis-Listener die Geschwindigkeit ein wenig. Unabhängig davon, ob SiengChange
verwenden oder nicht, wird der Digest-Zyklus bei Änderungen ausgeführt, sodass Sie die Möglichkeit haben, auf etwas zu warten und eine Funktion als Reaktion auf Änderungen aufzurufen.