AngularJS入门基础——表单验证
2014-12-26 18:20
811 查看
<form name="form" novalidata>
<label name="email">your email</label>
<input type="email" name="email" ng-model="email" placeholder="Email Address">
</form>
/*如下是朋友空间的内容*/
angular 高级校验特性
在一些情况下,单独的表单验证并不能满足需要,可能有一些特殊的校验,比如关联两个数据等等.通常这类校验都是可复用的,也就是需要一个directive.编写的自定义校验的 directive 并不复杂,首先需要了解几个 Angular 提供的属性和接口.
1. $setValidity()
这个方法可以人为的设置一个表单控件的$valid 以及$ invalid,也就是说改变表单控件是否通过校验的状态.类似的还有$setDirty()和$setPristine().
?
2. $parsers
这个属性解释起来稍微有点抽象,当 ngModel 的值发生变化的时候,Angular 会自己调用 $setViewValue(value),然后 ngModel 的 $parsers 数组中得函数会被逐个调用,当 $parsers[0] 中的方法被调用后执行结果会传递给 $parsers[1],以此类推,这些函数可以对 ngModel 的值进行转换或者通过 $setValidity() 设置表单的合法性.
所以如果我们想实现点什么特殊的校验,可以在 $parsers 中插入一个 function,然后它会在验证链中被调用,如果不希望数据模型发生更新,让 $parsers 的函数返回值返回 undefined 即可.
?
红色字体部分经过我的实践及探索,发现有误,正确的应该如下:
所以如果我们想实现点什么特殊的校验,可以在 $parsers 中插入一个 function,然后它会在验证链中被调用,如果不希望数据模型发生更新,让 $parsers 的函数返回值返回 原值 即可.
<label name="email">your email</label>
<input type="email" name="email" ng-model="email" placeholder="Email Address">
</form>
/*如下是朋友空间的内容*/
angular 高级校验特性
在一些情况下,单独的表单验证并不能满足需要,可能有一些特殊的校验,比如关联两个数据等等.通常这类校验都是可复用的,也就是需要一个directive.编写的自定义校验的 directive 并不复杂,首先需要了解几个 Angular 提供的属性和接口.
1. $setValidity()
这个方法可以人为的设置一个表单控件的$valid 以及$ invalid,也就是说改变表单控件是否通过校验的状态.类似的还有$setDirty()和$setPristine().
?
1 | ngModel.$setValidity( 'max-custom' , true ); // 类似这样的设置就将一个表单控件的状态改变了,ngModel 是 directive 的 link 的第四个参数,$setValidity 的第一个参数可以定义一个标志,第二个参数true 表示通过验证,false 表示未通过 |
这个属性解释起来稍微有点抽象,当 ngModel 的值发生变化的时候,Angular 会自己调用 $setViewValue(value),然后 ngModel 的 $parsers 数组中得函数会被逐个调用,当 $parsers[0] 中的方法被调用后执行结果会传递给 $parsers[1],以此类推,这些函数可以对 ngModel 的值进行转换或者通过 $setValidity() 设置表单的合法性.
所以如果我们想实现点什么特殊的校验,可以在 $parsers 中插入一个 function,然后它会在验证链中被调用,如果不希望数据模型发生更新,让 $parsers 的函数返回值返回 undefined 即可.
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .directive( 'maxMax' , function (){ return { require: 'ngModel' , restrict: 'A' , link: function ($scope,iElm,iAttrs,ngModel) { if (!ngModel) return ; ngModel.$parsers.unshift( function (viewValue){ var num = parseInt(viewValue); if (num>=0 && num<99){ ngModel.$setValidity( 'maxMax' , true ); return viewValue; } else { ngModel.$setValidity( 'maxMax' , false ); return undefined; } }); } }; }) |
所以如果我们想实现点什么特殊的校验,可以在 $parsers 中插入一个 function,然后它会在验证链中被调用,如果不希望数据模型发生更新,让 $parsers 的函数返回值返回 原值 即可.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .directive( 'maxMax' , function (){ return { require: 'ngModel' , restrict: 'A' , link: function ($scope,iElm,iAttrs,ngModel) { if (!ngModel) return ; ngModel.$parsers.unshift( function (viewValue){ var num = parseInt(viewValue); if (num>=0 && num<99){ ngModel.$setValidity( 'maxMax' , true ); return viewValue; } else { ngModel.$setValidity( 'maxMax' , false ); returnviewValue ; // 这里如果返回 undefined 则会导致部分ng自带验证器失效,因为获取不到ngModel.$viewValue的值了。 } }); } }; }) |
相关文章推荐
- AngularJs 入门系列-2 表单验证
- AngularJS 入门4-表单和验证
- 1.jQuery插件Validation(表单验证)之基础入门
- jQuery 表单验证插件——Validation(基础)
- jquery validate.js表单验证的基本用法入门
- jquery validate.js表单验证的基本用法入门
- jquery validate.js表单验证的基本用法入门
- wicket基础应用(1)--使用wicket对表单中的数据进行验证
- Netsharp快速入门(之8) 基础档案(工作区2 设置商品主列表、规格细列表、商品表单、查询)
- Angularjs系列之表单验证
- jquery validate.js表单验证的基本用法入门
- JavaScript 表单验证入门
- javascript入门·表单与表单元素总结(表单验证)
- 走进AngularJs(九)表单及表单验证
- PEAR::HTML_QuickForm入门[4]--表单数据验证
- (译) 在AngularJS中使用的表单验证功能
- jquery validate.js表单验证的基本用法入门
- jquery validate.js表单验证的基本用法入门
- jquery validate.js表单验证的基本用法入门
- jquery validate.js表单验证的基本用法入门发布