web-dev-qa-db-ja.com

ng-changeは新しい価値と元の価値を得る

プルダウンから値を選択するのにng-optionsを使用しています。古い値と新しい値を比較したいのですが。 ng-changeはプルダウンの新しい値を取得するためにはうまく機能しますが、どうすれば新しい値と元の値の両方を取得できますか?

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

たとえば、「以前のuser.nameはBILL、現在のユーザー名はPHILLIPE」というログをコントローラに記録したいとします。

106
Bailey Smith

角度{{expression}}を使うと、古いuserまたはuser.idの値をリテラル文字列としてng-change属性に追加できます。

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

NgChangeでは、updateValueの最初の引数は新しいユーザー値になり、2番目の引数はselect-tagが最後にangleによって更新されたときに形成されたリテラルを古いuser.id値にします。

259
db-inf

また使用することができます

<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>
13
Umut Catal

Ng-change = someMethod({{user.id}})のようなものを使うことができます。あなたの値を{{expression}}の横に置くことで式をインラインで評価し、あなたに現在の値(ng-changeメソッドが呼ばれる前の値)を与えます。

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

あなたが変更するたびにあなたが更新するcurrentValue変数をあなたのコントローラに保存するだけです。それを更新する前に毎回それを新しい値と比較することができます。

時計を使うという考えも良いですが、私は単純な変数が最も単純で論理的な解決策であると思います。

12
TGH

あなたはスコープウォッチを使用することができます:

$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

それは新旧の値を持っているので、代わりにwatchを使うことができますが、それからダイジェストサイクルに追加しています。

私はコントローラに2番目の変数を保存して設定します。

2
user12121234