Ich verwende ng-Optionen, um Werte aus einem Pulldown auszuwählen. Ich möchte den alten Wert mit dem neuen Wert vergleichen können. ng-change funktioniert gut, um den neuen Wert des Pulldowns zu ermitteln. Wie kann ich jedoch sowohl den neuen als auch den ursprünglichen Wert ermitteln?
<select ng-change="updateValue(user)" ng-model="user.id" ng-options="user.id as user.name for user in users"></select>
Angenommen, ich wollte, dass der Controller protokolliert: "Ihr früherer Benutzername war BILL, Ihr aktueller Benutzername ist PHILLIPE."
angularjs
ng-options
Bailey Smith
quelle
quelle
Antworten:
Mit einem eckigen {{Ausdruck}} können Sie den alten Wert user oder user.id als Literalzeichenfolge zum Attribut ng-change hinzufügen:
In ngChange ist das erste Argument für updateValue der neue Benutzerwert. Das zweite Argument ist das Literal, das gebildet wurde, als das select-Tag zuletzt durch Angular mit dem alten Wert user.id aktualisiert wurde.
quelle
user
Aufruf der Methode in derjenige vonng-model
und nicht von ng-options ist (möglicherweise irreführend). Hoffentlich funktioniert diese elegante Lösung auch in zukünftigen Versionen vonuser.id
numerisch ist ... es wird nicht funktionieren, wennuser.id
es eine Zeichenfolge oder eine Guid istAuch können Sie verwenden
quelle
Sie können so etwas wie ng-change = someMethod ({{user.id}}) verwenden. Wenn Sie Ihren Wert in Seite {{Ausdruck}} belassen, wird der Ausdruck inline ausgewertet und der aktuelle Wert angezeigt (Wert vor dem Aufruf der ng-change-Methode).
quelle
Behalten Sie einfach eine currentValue-Variable in Ihrem Controller, die Sie bei jeder Änderung aktualisieren. Sie können dies dann jedes Mal mit dem neuen Wert vergleichen, bevor Sie ihn aktualisieren. '
Die Idee, eine Uhr zu verwenden, ist ebenfalls gut, aber ich denke, eine einfache Variable ist die einfachste und logischste Lösung.
quelle
Sie können eine Zielfernrohruhr verwenden:
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch
quelle
Sie könnten stattdessen eine Uhr verwenden, da diese den alten und den neuen Wert hat, aber dann fügen Sie dem Digest-Zyklus etwas hinzu.
Ich würde nur eine zweite Variable im Controller behalten und diese einstellen.
quelle
$watch
es jedes Mal ausgelöst wird, wenn sich die Variable ändert. Beobachter erhöhen die Komplexität und neigen dazu, Aktualisierungszyklen zu erstellen, wenn Code ihre Werte ändert.