Angular Form验证示例
在这篇文章中,我们将看到Angular表单验证的工作原理。
之前我们研究了Angular Form和控件。
Angular Form验证
AngularJS使轻松处理客户端表单验证变得很容易。
在下一部分中,我们将研究一些Angular表单验证示例。
Angular Form验证–输入
以下是一些可用于输入字段的基本Angular Form验证选项。
- 必填项
将必需HTML5标记添加到输入字段可验证该字段是否为空。
这样可以确保该字段具有一定的价值。
以下语法用于必需的输入。
<input type="text" required
AngularJS提供了一个" ng-required"指令来做同样的事情。
使用此伪指令,您可以灵活地设置输入字段是否应具有值。
以下语法用于确保输入字段不应为空。
如果您不想限制它,我们可以将其设置为false。
<input type="text" ng-required="true"
- 最小长度
指令ng-minlength用于验证输入值的最小长度。
这将确保输入值的长度不小于使用ng-minlength指令设置的值。
<input type="text" ng-minlength=10
- 最大长度
指令ng-maxlength用于验证输入值的最大长度。
这将确保输入值的长度不超过使用ng-max length指令设置的值。
<input type="text" ng-maxlength=20
- 模式
ng-pattern指令用于确保输入匹配正则表达式模式,使用以下语法。
<input type="text" ng-pattern="[a-zA-Z]"
- 电子邮件
我们可以将输入类型设置为电子邮件,以确保输入字段是有效的电子邮件ID。
<input type="email" name="email" ng-model="user.email"
- 数字
我们可以将输入类型设置为数字,以确保输入字段是数字。
<input type="number" name="age" ng-model="user.age"
- 网址
我们可以将输入类型设置为url以确保输入字段是url。
<input type="url" name="homepage" ng-model="user.url"
角形验证属性
Angular在表单上提供属性以跟踪其所有控件和嵌套表单以及它们的状态,例如有效/无效或者脏/原始。
下表描述了有助于我们验证表单的那些属性和相应的Angular类。
属性 | 类别 | 说明 |
---|---|---|
$ valid | ng-valid | 布尔值如果所有包含的表单和控件均有效,则为True。 |
$ invalid | ng-invalid | 布尔值,如果包含控件或窗体的至少一个无效,则为True。 |
$ pristine | ng-pristine | Boolean如果用户尚未与表单交互,则为true。 |
$ dirty | ng-dirty | Boolean如果用户已经与表单进行了交互,则为true。 |
$ touched | ng-touched | 布尔值如果输入模糊,则为True。 |
$ submitted | ng-submit | 布尔值,如果用户提交了表单,即使该表单无效,也为True。 |
使用CSS类进行Angular Form验证
在处理表单时,angularJS根据状态将特定的类添加到表单中。
为了允许样式以及控件样式化,ngModel
添加了以下CSS类:
- ng-valid
- ng-invalid
- ng-pristine
- ng-dirty
- ng-touched
- ng-untouched
- ng-pending
下面的示例使用以下CSS来显示每个表单控件的有效性。
<style type="text/css"> .css-form input.ng-invalid.ng-touched { background-color: #FA787E; } .css-form input.ng-valid.ng-touched { background-color: #78FA89; } </style>
您必须在输入字段中添加required
属性,否则它将无法正确验证。
您还应该包含" novalidate"属性,以禁用浏览器的本机表单验证。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS Form Validation</title> </head> <body ng-app="formApp"> <div ng-controller="FormController"> <form name="form" novalidate class="css-form"> Name : <input type="text" ng-model="employee.name" required<br E-mail : <input type="email" ng-model="employee.email" required <br Role : <input type="radio" ng-model="employee.role" value="development" Development <input type="radio" ng-model="employee.role" value="testing" Testing<br </br> <input type="button" ng-click="reset()" value="Reset" <input type="submit" ng-disabled="form.$invalid" ng-click="save(employee)" value="Submit" </form> <p>Employee Form = {{employee | json}}</p> <p>Master = {{master | json}}</p> </div> <style type="text/css"> .css-form input.ng-invalid.ng-touched { background-color: #FA787E; } .css-form input.ng-valid.ng-touched { background-color: #78FA89; } </style> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>
如果表单输入无效,我们将禁用提交按钮。
以下代码显示了我们如何在应用程序中使用它。
<input type="submit" ng-disabled="form.$invalid" ng-click="save(employee)" value="Submit"
以下脚本定义了我们的应用程序中使用的控制器。
app.js
var app = angular.module('formApp', []); app.controller('FormController', function($scope) { $scope.master = {}; $scope.save= function(employee) { $scope.master = angular.copy(employee); }; $scope.reset = function() { $scope.employee = angular.copy($scope.master); }; $scope.reset(); });
您将在浏览器中看到以下输出。
在该示例中,employee.name和employee.email都是必需的,但是只有在输入没有焦点时才呈现红色背景。
使用$error属性进行Angular Form验证
AngularJS提供了另一个名为$error的属性,它是一个对象哈希,包含对带有失败验证器的控件或者表单的引用,其中其键是验证令牌(错误名称),而值是具有给定错误名称的失败验证器的控件或者表单的数组。
以下列表显示了内置验证令牌:
- max
- maxlength
- min
- minlength
- number
- pattern
- required
- url
- date
- datetimelocal
- time
- week
- month
以下Angular表单验证示例显示了使用$error属性的表单验证。
以下语法用于通过$error属性来验证输入字段-formName.inputFieldName。
$error.validateToken
Angular Form验证示例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS Simple Form Demo</title> </head> <body ng-app="formApp"> <div ng-controller="FormController"> <form name="form" novalidate class="css-form"> Name : <input type="text" ng-model="employee.name" name="empName" ng-required="true"<br <div ng-show="form.$submitted || form.empName.$touched"> <span style="color:orange" ng-show="form.empName.$error.required">Please enter your name. </div> E-mail : <input type="email" name="empEmail" ng-model="employee.email" ng-required="true"<br <div ng-show="form.$submitted || form.empEmail.$touched"> <span style="color:orange" ng-show="form.empEmail.$error.required">Please enter an email-id. <span style="color:red" ng-show="form.empEmail.$error.email">This is not a valid email. </div> Role : <input type="radio" ng-model="employee.role" value="development" Development <input type="radio" ng-model="employee.role" value="testing" Testing<br </br> <input type="button" ng-click="reset()" value="Reset" <input type="submit" ng-disabled="form.$invalid" ng-click="save(employee)" value="Submit" </form> <p>Employee Form = {{employee | json}}</p> <p>Master = {{master | json}}</p> </div> <style type="text/css"> .css-form input.ng-invalid.ng-touched { background-color: #FA787E; } .css-form input.ng-valid.ng-touched { background-color: #78FA89; } </style> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>
app.js
var app = angular.module('formApp', []); app.controller('FormController', function($scope) { $scope.master = {}; $scope.save= function(employee) { $scope.master = angular.copy(employee); }; $scope.reset = function() { $scope.employee = angular.copy($scope.master); }; $scope.reset(); });