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
Вместо этого вы можете использовать часы, потому что это имеет старое и новое значение, но затем вы добавляете в цикл дайджеста.
Я бы просто сохранил вторую переменную в контроллере и установил ее.