AngularJS - установить чистую форму без устранения ошибок проверки

У нас есть автосохранение и явное сохранение для конкретной формы (это длинная форма, и мы не хотим, чтобы пользователь терял данные). При явном сохранении недопустимые данные будут блокировать сохранение, и XHR не будет отправлено обратно на сервер. Однако для автосохранения мы хотим, чтобы данные были сохранены (если это возможно) независимо от внешней проверки.

Что нам нужно сделать, так это то, что если сохранение выполнено успешно на бэкэнде, то внешний интерфейс должен пометить форму как больше не грязную. Но... и вот стикер - он не должен удалять любые ошибки проверки / сообщения об ошибках из формы.

Исходя из того, что я вижу (или, по крайней мере, из того, что я понимаю), .$ SetPristine() удаляет форму, но проблематично также удаляет ошибки проверки.

Есть ли способ очистить форму, не удаляя ошибки проверки, чтобы автосохранение не запускалось, когда уже выполнено сохранение, но чтобы у пользователя оставалось сообщение о том, какие поля являются недействительными, чтобы они могли исправить проблемы?

Спасибо!

1 ответ

Решение

Форма $pristine / $dirty государства не связаны с $valid / $invalid состояния. Ваши сообщения об ошибках не должны быть удалены (если вы не используете $pristine / $dirty в состоянии, которое показывает / скрывает сообщения).


Таким образом, вы можете вызвать FormController's $setPristine() метод в вашей функции автосохранения, который "очистит" форму, но не повлияет на проверку и сообщения об ошибках.


Смотрите также это короткое демо.

Например:
* В скрипте выше введите что-то в одно поле (чтобы оно стало действительным, а форма стала грязной).
* The Save кнопка активируется.
* Нажатие Save Кнопка устанавливает состояние формы в $pristine , так что кнопка отключается (это имитирует автосохранение).
* Сообщения об ошибках все еще видны (и состояние действительности формы не изменяется).

Другие вопросы по тегам