#angular
#angular
Вопрос:
В чем причина решения Angular не сбрасывать класс ввода с ng-dirty
на ng-pristine
после того, как пользователь вручную вернет полю его начальное значение?
Я хочу выполнить свою логику сохранения, только если пользователь действительно изменил некоторые данные формы. Есть ли лучший способ, чем вручную удерживать начальное состояние и проверять различия при отправке?
Комментарии:
1. Как сбрасывается? . . .
2. Например, начальное значение при вводе
hello
— это типы пользователейa
, новое входное значениеhelloa
— это состояние dirty. Пользователь нажимает пробел,hello
снова появляется новое значение, Angular должен (имхо) сбросить состояние до не загрязненного.
Ответ №1:
Статус dirty
: это означает, что пользователь изменил значение. Однако Angular не отслеживает исходное значение и поэтому не может определить, было ли восстановлено исходное значение.
Если вы хотите узнать, изменилось ли значение, вы должны сохранить значение и при отправке сравнить себя, изменилось ли оно.
Комментарии:
1. «Статус загрязнен, это означает, что пользователь коснулся значения». — разве это не то, для чего нужны состояния
ng-touched
иng-untouched
? Разве вы даже не подразумеваете это, говоря «пользователь коснулся значения» 🙂2. Вы правы, извините. AFAIK, он по-прежнему не сохраняет исходное значение для сравнения.
ng-touched
проверяет только, был ли элемент управления в фокусе.3. Хорошо, это действительно прискорбно. Знаете ли вы что-нибудь о причинах, по которым они не включили функцию отслеживания изменений? Действительно громоздко писать такую логику для всех моих полей … жаль. Я создам запрос функции.
4. Я думаю, это слишком сложно, учитывая
ngModel
поддержку пользовательских компонентов с любым значением, где неясно, что означает «без изменений». Но API можно расширить, чтобы компонент должен был реализовать само сравнение.5. Я создал проблему в github.com/angular/angular/issues/12213 , в то же время: спасибо за разработку текущих возможностей.