wake-up-neo.net

ng-change bekommt neuen Wert und ursprünglichen Wert

Ich verwende ng-options, um Werte aus einem Pulldown auszuwählen. Ich möchte in der Lage sein, den alten Wert mit dem neuen Wert zu vergleichen. ng-change funktioniert gut, um den neuen Wert des Pulldowns zu erfassen, aber wie kann ich 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 möchte, dass der Controller Folgendes protokolliert: "Ihr früherer Benutzername war BILL, Ihr aktueller Benutzername ist PHILLIPE."

109
Bailey Smith

Mit einem angular {{Ausdruck}} können Sie den alten Benutzer- oder user.id-Wert als Literalzeichenfolge zum Attribut ng-change hinzufügen:

<select ng-change="updateValue(user, '{{user.id}}')" 
        ng-model="user.id" ng-options="user.id as user.name for user in users">
</select>

In ngChange ist das erste Argument für updateValue der neue Benutzerwert, das zweite Argument das Literal, das bei der letzten Aktualisierung des Select-Tags durch angle mit dem alten Wert für user.id gebildet wurde.

262
db-inf

Auch können Sie verwenden

<select ng-change="updateValue(user, oldValue)"     
       ng-init="oldValue=0"
       ng-focus="oldValue=user.id"
       ng-model="user.id" ng-options="user.id as user.name for user in users">
</select>
14
Umut Catal

Sie können so etwas wie ng-change = someMethod ({{user.id}}) verwenden. Indem Sie Ihren Wert auf der Seite {{expression}} belassen, wird expression in-line ausgewertet und der aktuelle Wert angezeigt (Wert, bevor die Methode ng-change aufgerufen wird).

<select ng-model="selectedValue" ng-change="change(selectedValue, '{{selectedValue}}')">
13
Vivek Panday

Behalten Sie einfach eine Variable currentValue in Ihrem Controller bei, die Sie bei jeder Änderung aktualisieren. Sie können diesen Wert dann jedes Mal mit dem neuen Wert vergleichen, bevor Sie ihn aktualisieren. '

Die Idee, eine Uhr zu verwenden, ist auch gut, aber ich denke, eine einfache Variable ist die einfachste und logischste Lösung.

12
TGH

Sie können eine Zielfernrohruhr verwenden:

$scope.$watch('user', function(newValue, oldValue) {
  // access new and old value here
  console.log("Your former user.name was "+oldValue.name+", you're current user name is "+newValue.name+".");
});

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch

8
tommybananas

Sie könnten stattdessen eine Uhr verwenden, da diese den alten und den neuen Wert hat, aber Sie erhöhen dann den Digest-Zyklus.

Ich würde nur eine zweite Variable im Controller behalten und das einstellen.

2
user12121234