=====Валидация формы===== AngularJS предлагает проверку формы на стороне клиента.\\ AngularJS отслеживает состояние полей формы и ввода (input, textarea, select) и позволяет уведомлять пользователя о текущем состоянии.\\ AngularJS также содержит информацию о том, были ли они затронуты, или изменены, или нет.\\ ====Required==== Используйте атрибут HTML5, необходимый для указания того, что поле ввода должно быть заполнено:\\

The input's valid state is:

{{myForm.myInput.$valid}}

====E-mail==== Используйте атрибут HTML5, чтобы указать, что значение должно быть электронной почтой:

The input's valid state is:

{{myForm.myInput.$valid}}

====Form State and Input State==== AngularJS постоянно обновляет состояние как формы, так и полей ввода.\\ Поля ввода имеют следующие состояния: * **$untouched** Поле еще не было затронуто * **$touched** Поле было затронуто * **$pristine** Поле еще не было изменено * **$dirty** Поле было изменено * **$invalid** Содержание поля недействительно * **$valid** Содержание поля действительно Все они являются свойствами полей ввода и имеют значение true или false.\\ Формы имеют следующие состояния:\\ $pristine Поля еще не были изменены $dirty Один или несколько были изменены $invalid Содержание формы недействительно $valid Содержание формы действительно $submitted Форма отправлена Все они являются свойствами формы и являются либо истинными, либо ложными. Вы можете использовать эти состояния для показа значимых сообщений пользователю. Например, если поле является обязательным, и пользователь оставляет его пустым, вы должны вывести ему предупреждение:\\ ===пример=== Показать сообщение об ошибке, если на поле сфокусировались и оставили его пустым:\\ The name is required. ====CSS Classes==== //AngularJS// добавляет классы //CSS// к формам и полям ввода в зависимости от их состояний.\\ \\ Следующие классы добавляются или удаляются из полей ввода: * **ng-untouched** Поле еще не было затронуто * **ng-touched** Поле было затронуто * **ng-pristine** Поле еще не было изменено * **ng-dirty** Поле было изменено * **ng-valid** Содержание поля действительно * **ng-invalid** Содержание поля недействительно * **ng-valid-key** Один ключ для каждой проверки. Пример: ng-valid-required, полезно, когда есть более чем один параметр, который должен быть проверен. * **ng-invalid-key** Пример: ng-invalid-required Следующие классы добавляются или удаляются из форм:\\ * **ng-pristine** Ни одно из полей не было изменено * **ng-dirty** Одно или несколько полей были изменены * **ng-valid** Содержание формы действительно * **ng-invalid** Содержание формы недействительно * **ng-valid-key** Один ключ для каждой проверки. Пример: ng-valid-required, полезно, когда есть более чем один параметр, который должен быть проверен. * **ng-invalid-key** Пример: ng-invalid-required Классы удаляются, если значение, которое они представляют, равно false.\\ Добавьте стили для этих классов, чтобы дать вашему приложению лучший и более понятный пользовательский интерфейс.\\ ===Пример=== Применяйте стили, используя стандартный CSS: Формы также могут быть стилизованы: ====Отображение сообщений о невалидности==== отображение сообщений о невалидности пользовательского ввода это хороший тон но существует два подхода для отображения сообщений: 1й когда ввод валидируется после каждого действия пользователя и 2й данные валидируются после нажатия на кнопку **submit**\\ Forms
{{getError(myForm.userEmail.$error)}}
====Пользовательская валидация==== Создать свою собственную функцию проверки немного сложнее; Вы должны добавить новую директиву в ваше приложение и обрабатывать данные внутри нее. ===Пример=== Создайте свою собственную директиву, содержащую пользовательскую функцию проверки, и обратитесь к ней с помощью **my-directive**.\\ Поле будет действительным, только если значение содержит символ «е»:
В HTML новая директива будет указываться с помощью атрибута **my-directive**.\\ В JavaScript мы начинаем с добавления новой директивы **myDirective**.\\ Помните, что при именовании директивы вы должны использовать имя дела верблюда, myDirective, но при его вызове вы должны использовать разделенное имя, **my-directive**.\\ Затем верните объект, в котором вы указываете, что нам требуется **ngModel**, то есть ngModelController.\\ Создайте функцию связывания, которая принимает несколько аргументов, где четвертый аргумент, **mCtrl**, это **ngModelController**,\\ Затем укажите функцию, в данном случае с именем **myValidation**, которая принимает один аргумент, этот аргумент является значением входного элемента.\\ Проверьте, содержит ли значение букву «e», и установите допустимость контроллера модели на **true** или **false**.\\ Наконец, **mCtrl.$Parsers.push(myValidation);** добавит функцию **myValidation** в массив других функций, которые будут выполняться каждый раз, когда изменяется входное значение. ====Пример валидации====

Validation Example

Username:
Username is required.

Email:
Email is required. Invalid email address.

Атрибут HTML-формы **novalidate** используется для отключения проверки браузера по умолчанию. Директива AngularJS **ng-model** связывает входные элементы с моделью.\\ Объект модели имеет два свойства: **user** и **email**.\\ Из-за **ng-show** диапазоны с color: red отображаются только тогда, когда пользователь или электронная почта имеют значение **$dirty** и **$invalid**.