Я использую 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>
Например, скажем, я хотел, чтобы контроллер регистрировал: «Ваше прежнее имя пользователя было BILL, ваше текущее имя пользователя - PHILLIPE».
angularjs
ng-options
Бейли Смит
источник
источник
Ответы:
С помощью angular {{выражение}} вы можете добавить старое значение user или user.id к атрибуту ng-change в виде буквальной строки:
В ngChange 1-м аргументом updateValue будет новое значение пользователя, 2-м аргументом будет литерал, который был сформирован, когда тег select был в последний раз обновлен angular со старым значением user.id.
источник
user
вызов метода in - это вызов изng-model
, а не из ng-options (может вводить в заблуждение). Надеюсь, это элегантное решение будет работать и в будущих версиях angular :)user.id
числовой ... он не будет работать, еслиuser.id
это строка или руководствоТакже вы можете использовать
источник
Вы можете использовать что-то вроде ng-change = someMethod ({{user.id}}). Сохраняя ваше значение в стороне {{выражение}}, он будет оценивать выражение в строке и давать вам текущее значение (значение до вызова метода ng-change).
источник
Просто сохраните в контроллере переменную currentValue, которую вы обновляете при каждом изменении. Затем вы можете сравнивать это с новым значением каждый раз, прежде чем обновлять его ».
Идея использования часов тоже хороша, но я думаю, что простая переменная - это самое простое и логичное решение.
источник
Вы можете использовать прицел часы:
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch
источник
Вместо этого вы можете использовать часы, потому что они имеют старое и новое значение, но затем вы добавляете их в цикл дайджеста.
Я бы просто сохранил вторую переменную в контроллере и установил ее.
источник
$watch
срабатывает каждый раз при изменении переменной. Наблюдатели увеличивают сложность и склонны создавать циклы обновления, когда код меняет свои значения.