угловая форма останавливается при первой ошибке проверки, оставляя $error в неправильном состоянии

#angularjs

#angularjs

Вопрос:

У меня есть поле электронной почты в моей форме, которое проверяется как на то, что оно не пустое, так и на действительное электронное письмо. Код выглядит следующим образом (см. plunker — Angular 1.3.0-beta.13 ):

 <form name="myForm" novalidate>
  <input type="email" name="email" ng-model="email" required>
  <span ng-show="myForm.email.$error.required">Missing Email</span> |
  <span ng-show="myForm.email.$error.email">Invalid Email</span>
  <pre>myForm.email.$error: {{  myForm.email.$error | json }}</pre>
</form>
  

При запуске отображается только сообщение «Отсутствует электронная почта», как и ожидалось. Когда я начинаю вводить ввод, отображаются оба сообщения Missing Email и Invalid Email , даже если поле не пустое! Этого не ожидается.

введите описание изображения здесь

При вводе действительного электронного письма обе ошибки исчезают, как и ожидалось:

введите описание изображения здесь

При переходе из допустимого состояния электронной почты в недопустимое состояние электронной почты (с помощью символов удаления) отображается только недопустимое сообщение электронной почты, как и ожидалось:

введите описание изображения здесь

Кажется, что angular останавливается при первом нарушении проверки, оставляя объект $error в устаревшем состоянии.

Это ошибка в фреймворке? я что-то здесь упускаю?

Комментарии:

1. Возможно, вы что-то упускаете. Это работает так, как ожидалось в этом plunkr .

2. @SunilD. Я использую angular 1.3.0

3. В значении модели не будет сохранено значение, пока не будет «допустимого» значения, поэтому значение email не определено, пока вы что-то не введете. Причина, по которой это работает во второй раз, заключается в том, что после ввода пробела для модели все еще остается значение. Просто добавьте a {{ email}} , чтобы увидеть результат в режиме реального времени, и вы увидите.

4. @JoseM любая документация или обоснование того, почему модель, сгенерированная формой для полей ввода, не обновляется? Даже если модель не обновляется, я все равно ожидаю, что правила проверки будут выполняться до завершения, а не останавливаться и оставлять устаревший объект $error

Ответ №1:

Это ошибка в бета-версии angularjs 1.3.0 (по крайней мере, до бета-версии.13). Запрос на извлечение находится на рассмотрении.