ng-dirty не сбрасывается после того, как пользователь вручную сбрасывает поле?

#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 , в то же время: спасибо за разработку текущих возможностей.