НГ-изменение получить новое значение и исходное значение
Я использую 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>
например, предположим, что я хотел, чтобы контроллер регистрировал: "ваш бывший user.name был Билл, ваше текущее имя пользователя-Филипп."
6 ответов:
С помощью углового {{выражения}} вы можете добавить старого пользователя или 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-tag был в последний раз обновлен angular, со старым user.id ценность.
просто держите переменную currentValue в контроллере, который вы обновляете при каждом изменении. Затем вы можете сравнить это с новым значением каждый раз, прежде чем обновлять его.-
идея использования часов также хороша, но я думаю, что простая переменная является самым простым и логичным решением.
вы можете использовать что-то вроде ng-change=someMethod({{user.id}}). Сохраняя свое значение в стороне {{expression}} , он будет оценивать выражение в строке и дает вам текущее значение(значение перед вызовом метода ng-change).
<select ng-model="selectedValue" ng-change="change(selectedValue, '{{selectedValue}}')">
также вы можете использовать
<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>
вы можете использовать scope watch:
$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