@xiaoqq
2016-08-29T12:08:25.000000Z
字数 2454
阅读 1545
AngularJS
required
: 必填项ng-minlength\ng-maxlength
: 最小\最大长度ng-pattern
: 模式匹配type="email"
: 验证电子邮件type="number"
: 验证数字type="url"
: 验证Url在表单元素上添加novalidate标记即可,问题是我们怎么知道我们的表单有哪些字段是有效的,那些事非法或者无效的?ng对此也提供了非常棒的解决方案,表单的属性可以在其所属的$scope对象中访问到,而我们又可以访问$scope对象,因此JavaScript可以间接地访问DOM中的表单属性。借助这些属性,我们可以对表单做出实时响应。
可以使用formName.inputFieldName.property
的格式访问这些属性。
Property | Class | Description |
---|---|---|
$valid | ng-valid | {Boolean}当验证规则通过时为true |
$invalid | ng-invalid | {Boolean}当验证规则不通过时为true |
$pristine | ng-pristine | {Boolean}当输入元素没被填写过 |
$dirty | ng-dirty | {Boolean}当输入元素被填写过 |
$error | 它包含当前表单的所有验证内容,以及它们是否合法的信息 |
使用示例:
<form role="form" name="myForm" ng-submit="submitForm(myForm.$valid)" novalidate>
<div >
<div class="col-md-4">
<label for="name">1.必填项</label>
</div>
<div class="col-md-8">
<input class="form-control" id="name" name="name" type="text" required ng-model='user.name' />
<span ng-show="myForm.name.$dirty && myForm.name.$valid"></span>
</div>
</div>
</form>
自定义对个email验证的指令:
angular.module("myTest", [])
.directive('multipleEmail', [function () {
return {
require: "ngModel",
link: function (scope, element, attr, ngModel) {
if (ngModel) {
var emailsRegexp = /^([a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*[;;]?)+$/i;
}
var customValidator = function (value) {
var validity = ngModel.$isEmpty(value) || emailsRegexp.test(value);
ngModel.$setValidity("multipleEmail", validity);
return validity ? value : undefined;
};
ngModel.$formatters.push(customValidator);
ngModel.$parsers.push(customValidator);
}
};
}])
<form class="form-horizontal" role="form" id="custom_form" name="custom_form" novalidate>
<div class="form-group">
<label class="col-sm-2 control-label">多个email</label>
<div class="col-sm-10">
<input multiple-email name="user_email" ng-model="user.email" required class="form-control" placeholder="自定义验证,多个邮箱地址,以“;”或者“;”分割" />
验证通过:{{custom_form.user_email.$valid}}
</div>
</div>
<div class="form-group text-center">
<input class="btn btn-primary btn-lg" ng-disabled="custom_form.$invalid" type="submit" value="提交" />
</div>
</form>
涉及知识点:
$setViewValue()
方法被调用时,其中的函数在当用户同控制器进行交互,并且ngModelController中的$setViewValue()
方法被调会以流水线的形式被逐一调用。ngModel从DOM中读取的值会被传入$parsers
中的函数,并依次被其中的解析器处理。这是为了对值进行处理和修饰。$parser
流水线互不影响,用来对值进行格式化和转换,以便在绑定了这个值的控件中显示。$viewChangeListeners
,可以在无需使用$watch
的情况下实现类似的行为。由于返回值会被忽略,因此这些函数不需要返回值。