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
====Пользовательская валидация====
Создать свою собственную функцию проверки немного сложнее; Вы должны добавить новую директиву в ваше приложение и обрабатывать данные внутри нее.
===Пример===
Создайте свою собственную директиву, содержащую пользовательскую функцию проверки, и обратитесь к ней с помощью **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