Подтвердить что ты не робот

Сообщение об ошибке проверки правильности формы AngularJS

Есть ли способ передать сообщение об ошибке в пользовательской форме проверки?

например. У меня есть директива, которая проверяет имя пользователя. Возможны три возможных результата:

  • Это действительно
  • Недействительно, потому что это нехорошее имя пользователя ( "this.is-invalid" )
  • Недействителен, поскольку он уже используется

У меня есть такая директива, как (упрощенный псевдо-html):

<input type="text" namecheck></input><span ng-show="name.$error.namecheck">You had an error {{ error }}</span>

И в моей настраиваемой директиве я могу сделать

// check for a conflict and valid name here
ngModel.$setValidity("namecheck",false);

Но как передать сообщение об ошибке, указывающее, была ли проблема конфликтом или недопустимым именем? Есть что-то вроде ngModel.$setValidityErrorMessage()?

4b9b3361

Ответ 1

Как я писал в комментариях, я просто понял это. Мне просто нужно использовать разные флаги действительности. Ничто не говорит, что я должен использовать тот же ключ в $setValidity() как имя директивы!

<span ng-show="name.$error.nameinvalid">This is not a valid username, it must be alphanmueric</span>
<span ng-show="name.$error.nametaken">Sorry, the username {{ name }} is already taken</span>

И в директиве

// if I got a 409
ngModel.$setValidity("nametaken",false);
// if I got a 400
ngModel.$setValidity("nameinvalid",false);

Имя $error имеет сообщение об ошибке!

Ответ 2

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

Возможно, вы заметили сообщения об ошибках, которые появляются в полях required, которые пусты? В хроме они говорят что-то вроде: "Пожалуйста, заполните это поле" или что-то в этом роде. Они специфичны для браузера и никак не связаны с Angular.

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

В Angular docs есть пример (найдено здесь), который показывает один из способов сделать это.

UPDATE:

Начиная с Angular 1.3, теперь поддерживаются директивы ngMessage и ngMessages. Эти новые директивы пытаются сделать проверку формы и обмен сообщениями об ошибках менее сложными. Angular docs для этих директив здесь. Подробнее см. Ссылку.