ng-change获取新值和原始值

我正在使用ng-options从下拉列表中select值。 我希望能够比较旧价值和新价值。 ng-change很适合抓取下拉的新值,但是怎样才能得到新值和原始值?

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

例如,假设我希望控制器logging“您的以前的用户名是BILL,您的当前用户名是PHILLIPE”。

使用angular度{{expression式}},您可以将旧用户或user.id值作为string添加到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的第一个参数将是新的用户值,第二个参数将是select-tag最后一次更新时由angular和old user.id值形成的文字。

只要在控制器中保存一个currentValuevariables,以便在每次更改时更新。 然后,您可以在每次更新之前将其与新值进行比较。

使用手表的想法也很好,但我认为一个简单的variables是最简单和最合乎逻辑的解决scheme。

您可以使用示波器手表:

 $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

也可以使用

 <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> 

你可以使用ng-change = someMethod({{user.id}})。 通过将值保留在{{expression式}}中,它将在线计算expression式,并为您提供当前值(在调用ng-change方法之前的值)。

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

您可以使用手表,因为它具有旧的和新的价值,但是随后您将添加到摘要周期。

我只是在控制器中保留第二个variables并设置它。