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

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

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

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

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

Спасибо!


person Mr Mikkél    schedule 01.07.2014    source источник
comment
Я бы посоветовал не использовать для этого $pristine, так как он уже имеет смысл (не имеющий ничего общего с автосохранением). Вы можете создать свой собственный атрибут, и однажды $pristine можно будет использовать для предоставления пользователям отзывов о том, какие поля они коснулись.   -  person maaartinus    schedule 02.07.2014


Ответы (1)


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


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


См. также эту короткую демонстрацию.

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

person gkalpak    schedule 01.07.2014
comment
?!? За что опять минус?!? (Давайте, люди, хотя бы оставьте комментарий...) - person gkalpak; 01.07.2014
comment
Вы абсолютно правы. Тот, кто поставил вам минус, плохо поработал. Исходное состояние и действительное состояние никак не связаны, и ваш пост должен быть помечен как принятый ответ. - person zszep; 01.07.2014
comment
Да, вы были правы ExpertSystem. Меня смутила другая директива, которую другой разработчик прикрепил к форме. Спасибо за скрипку. Я проголосовал за вас, чтобы противодействовать отрицательному голосованию :) - person Mr Mikkél; 01.07.2014
comment
@ExpertSystem Сделано с удовольствием - person zszep; 01.07.2014