Ng-change получает новое значение и исходное значение

Я использую ng-options для выбора значений из раскрывающегося списка. Я бы хотел, чтобы сравнить старое значение с новым значением. ng-change хорошо работает для захвата нового значения pull down, но как я могу получить как новое значение, так и исходное значение?

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

Например, скажем, я хотел, чтобы контроллер регистрировался: "Ваше прежнее имя пользователя было BILL, ваше текущее имя пользователя - PHILLIPE".

Ответ 1

С помощью angular {{expression}} вы можете добавить значение старого пользователя или 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 будет новым значением пользователя, второй аргумент будет литералом, который был сформирован, когда тег select был последним обновлен angular со старым значением user.id.

Ответ 2

Просто сохраните переменную currentValue в контроллере, которую вы обновляете при каждом изменении. Затем вы можете сравнить это с новым значением каждый раз, прежде чем обновлять его. '

Идея использования часов также хороша, но я думаю, что простая переменная является самым простым и логичным решением.

Ответ 3

Вы можете использовать часовой пояс:

$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

Ответ 4

Также вы можете использовать

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

Ответ 5

Вы можете использовать что-то вроде ng-change = someMethod ({{user.id}}). Сохраняя значение в стороне {{выражение}}, он будет оценивать выражение в строке и дает текущее значение (значение перед вызовом метода ng).

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

Ответ 6

Вместо этого вы можете использовать часы, потому что это имеет старое и новое значение, но затем вы добавляете в цикл дайджеста.

Я бы просто сохранил вторую переменную в контроллере и установил ее.