ng-form用来在一个表单内部嵌套另一个表单。普通的HTML <form>
标签不允许嵌套,但ng-form可以。
这意味着内部所有的子表单都合法时,外部的表单才会合法。这对于用ng-repeat动态创建表单是非常有用的。
(1)Angular为form扩展了自动校验,防止重复提交等功能
(2)Angular对input的type进行了扩展,一共有10种类型:
text,number,url,email,radio,checkbox,hidden,button,submit,reset
(3)Angular为表单内置了四种css样式:
ng-valid, ng-invalid, ng-pristine, ng-dirty
一、常用的表单验证指令
1 . 必填项验证
某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:
<input type="text" required />
2 . 最小长度
验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= “{number}”:
<input type="text" ng-minlength="5" />
3 . 最大长度
验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength=”{number}”:
<input type="text" ng-maxlength="20" />
4 . 模式匹配
使用ng-pattern=”/PATTERN/”来确保输入能够匹配指定的正则表达式:
<input type="text" ng-pattern="/[a-zA-Z]/" />
5 . 电子邮件
验证输入内容是否是电子邮件,只要像下面这样将input的类型设置为email即可:
<input type="email" name="email" ng-model="user.email" />
6 . 数字
验证输入内容是否是数字,将input的类型设置为number:
<input type="number" name="age" ng-model="user.age" />
7 . URL
验证输入内容是否是URL,将input的类型设置为 url:
<input type="url" name="homepage" ng-model="user.facebook_url" />
8 . 自定义验证
AngularJS可以很容易的使用指令来添加自定义验证。例如,我们要验证我们的用户名是可用的(在数据库中不重复)。要做到这一点,我们将实现一个指令,它在输入字符变化时触发一个Ajax请求:
var app = angular.module('validationExample', []);
app.directive('ensureUnique', ['$http', function($http) {
return {
require: 'ngModel',
link: function(scope, ele, attrs, c) {
scope.$watch(attrs.ngModel, function() {
$http({
method: 'POST',
url: '/api/check/' + attrs.ensureUnique,
data: {'field': attrs.ensureUnique}
}).success(function(data, status, headers, cfg) {
c.$setValidity('unique', data.isUnique);
}).error(function(data, status, headers, cfg) {
c.$setValidity('unique', false);
});
});
}
}
}]);