Валидация форм AngularJS
- Предыдущая страница Формы AngularJS
- Следующая страница API AngularJS
AngularJS может проверять вводимые данные.
Валидация форм
AngularJS предоставляет клиентскую валидацию форм.
AngularJS отслеживает состояние форм и полей ввода (input, textarea, select) и позволяет вам уведомлять пользователей о текущем состоянии.
AngularJS также содержит информацию о том, были ли они касались или изменены.
Вы можете использовать стандартные атрибуты HTML5 для проверки ввода, а также создавать свои собственные функции проверки.
Клиентская валидация не может полностью защитить ввод пользователя. Требуется также валидация на сервере.
required
Использование атрибутов HTML5 required
Указанное значение должно быть заполнено:
экземпляр
Это поле ввода обязательно:
<form name="myForm"> <input name="myInput" ng-model="myInput" required> </form> <p>Эффективное состояние ввода:</p> <h1>{{myForm.myInput.$valid}}</h1>
Использование типа HTML5 email
Значение, указанное вами, должно быть электронной почтой:
экземпляр
Этот поле ввода должно быть электронной почтой:
<form name="myForm"> <input name="myInput" ng-model="myInput" type="email"> </form> <p>Эффективное состояние ввода:</p> <h1>{{myForm.myInput.$valid}}</h1>
Состояние формы и состояние поля ввода
AngularJS постоянно обновляет состояние форм и полей ввода.
Поля ввода имеют следующие состояния:
$untouched
Это поле еще не было коснуто$touched
Это поле было коснuto$pristine
Это поле еще не было изменено$dirty
Это поле было изменено$invalid
Содержимое поля недействительно$valid
Содержимое поля эффективно
Они все являются свойствами поля ввода и могут быть правдой или лжи.
Форма имеет следующие состояния:
$pristine
Нет полей, которые были изменены$dirty
Одна или несколько полей были изменены$invalid
Содержимое формы недействительно$valid
Содержимое формы эффективно$subscribed
Форма была отправлена
Они все являются свойствами формы и могут быть правдой или лжи.
Вы можете использовать эти состояния для отображения значимых сообщений пользователю. Например, если поле является обязательным, а пользователь оставил его пустым, то следует предупредить пользователя:
экземпляр
Если поле было коснуто и пусто, то отображается сообщение об ошибке:
<input name="myName" ng-model="myName" required> <span ng-show="myForm.myName.$touched && myForm.myName.$invalid">Имя - обязательное поле.</span>
CSS-классы
AngularJS добавляет CSS-классы к формам и полям ввода в зависимости от их состояния.
Следующие классы были добавлены к полю ввода или удалены из поля ввода:
ng-untouched
Это поле еще не было коснутоng-touched
Это поле было коснutong-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 для применения стилей:
<style> input.ng-invalid { background-color: pink; }; input.ng-valid { background-color: lightgreen; }; </style>
Также можно установить стиль формы.
экземпляр
Применение стилей для неизмененного (оригинального) и измененного форм:
<style> form.ng-pristine { background-color: lightblue; }; form.ng-dirty { background-color: pink; }; </style>
Пользовательская проверка
Создание пользовательской функции проверки требует некоторых навыков; вам нужно добавить новую директиву в приложение и использовать некоторые специфические параметры обработчиков для выполнения проверки внутри функции.
экземпляр
Создайте свою директиву, содержащую пользовательскую функцию проверки, и используйте её my-directive
ссылаться на него.
Это поле активно только когда значение содержит символ "e":
<form name="myForm"> <input name="myInput" ng-model="myInput" required my-directive> </form> <script> var app = angular.module('myApp', []); app.directive('myDirective', function() { return { require: 'ngModel', link: function(scope, element, attr, mCtrl) { function myValidation(value) { if (value.indexOf("e") > -1) { mCtrl.$setValidity('charE', true); } else { mCtrl.$setValidity('charE', false); }; return value; }; mCtrl.$parsers.push(myValidation); }; }; }); </script>Example Explained:
В HTML, новая директива будет использоваться через использование атрибута my-directive
для ссылки.
В JavaScript, мы сначала добавляем имя myDirective
новой директивы.
Помните, когда вы называете директиву, вы должны использовать метод camelCase, например myDirective
но при вызове его, вы должны использовать имя, разделенное дефисом, например my-directive
.
Затем верните объект, в котором указываем, что нам нужно ngModel
то есть ngModelController
.
Создать функцию связывания, которая принимает несколько параметров, среди которых четвертый параметр mCtrl
является ngModelController
.
Затем определить функцию, в данном примере назовем её myValidation
он принимает один параметр, это значение элемента ввода.
Тестировать, содержит ли значение букву "e", и установить有效性 модели контроллера в true
или false
.
В конце концов,mCtrl.$parsers.push(myValidation);
будет myValidation
Функция добавляется в массив других функций, которые будут выполняться каждый раз при изменении значения ввода.
验证示例
<!DOCTYPE html> <html> <script src="https://cdn.staticfile.net/angular.js/1.6.9/angular.min.js"></script> <body> <h2>验证示例</h2> <form ng-app="myApp" ng-controller="validateCtrl" name="myForm" novalidate> <p>用户名:<br> <input type="text" name="user" ng-model="user" required> <span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid"> <span ng-show="myForm.user.$error.required">用户名是必填项。< </span> </p> <p>电子邮件:<br> <input type="email" name="email" ng-model="email" required> <span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid"> <span ng-show="myForm.email.$error.required">电子邮件是必填项。</span> <span ng-show="myForm.email.$error.email">无效的电子邮件地址。</span> </span> </p> <p> <input type="submit" ng-disabled="myForm.user.$dirty && myForm.user.$invalid || myForm.email.$dirty && myForm.email.$invalid"> </p> </form> <script> var app = angular.module('myApp', []); app.controller('validateCtrl', function($scope) {}} $scope.user = 'Bill Gates'; $scope.email = 'bill.gates@gmail.com'; }); </script> </body> </html>
Атрибуты HTML-формы novalidate Для禁ирования-default браузерной валидации.
Пример объяснения:
Инструкции AngularJS ng-model
Привязка вводного элемента к модели.
Модельный объект имеет два свойства:user
и email
.
из-за ng-show
только когда user или email $dirty
и $invalid
Только при этом условии будут отображаться spans с color:red.
- Предыдущая страница Формы AngularJS
- Следующая страница API AngularJS