angularjs Form进阶
来源:互联网 发布:网络选修课网站 编辑:程序博客网 时间:2024/06/05 02:36
其他文章尽在 https://github.com/tiw/angularjs-tutorial
form 进阶
css 样式
对于表单在不同状态下, 我们可能希望它有不同的样式。举个具体的例子,我们希望表单中名字这项是必填的, 如果没填就显示黄色背景, 提示用户。 这里有个问题, 就是当表单首次显示的时候, 及时这个时候名字这项是空的, 我们也不希望显示黄色背景。
ng form 会给根据具体情况给表单里的每项自动添加下列 css class:
- ng-valid: 验证通过
- ng-invalid: 验证没有通过
- ng-pristine: 用户没有输入任何东西
- ng-dirty: 用户输入了东西, 不管最终值有木有改变。 例如开始里面是空的, 填写了ab, 之后又吧ab删除了, 这是也是dirty的.
通过这个类我们可以实现我们上面想要的效果
<form name="myForm" ng-submit="save()"> <input type="text" name="personName" ng-model="person.name" required> <input type="submit" value="保存"/></form><style type="text/css"> input.ng-invalid.ng-dirty { background-color: yellow; }</style>
demo
customer validation 自定义的验证
form入门里我们已经了解到了, angularjs实现了常用的一些表单验证。
- required
- pattern
- minlength
- maxlength
- min
- max
现实中可能需要自定义的一些验证器, 比如在管理scrum story point的时候, 故事点数只能是 1, 2, 3, 5, 8, 13, 20, 40, 80。 下面我们实现并且使用我们自己定义的directive
angular.module('myApp').directive('spoint', function() { return { require: 'ngModel', link: function(scope, elm, attrs, ctrl) { var fibonacci = [1, 2, 3, 5, 8, 13, 20, 40, 80]; ctrl.$parsers.unshift(function(viewValue) { if (fibonacci.indexOf(parseInt(viewValue)) >= 0) { ctrl.$setValidity('fibonacci', true); return viewValue; } else { ctrl.$setValidity('fibonacci', false); return undefined; } }); } };});
这里值得注意的是directive里link方法的第四个参数,我们在require里定义了ngModel所以这里它是一个 NgModelControllerhttp://docs.angularjs.org/api/ng.directive:ngModel.NgModelController。
NgModelController是用来为ng-model提供了一组API。通过他我们可以他来确定ngModel的值是否是合法的。 我们这里只介绍其中和表单验证有关的几个方法和属性。
上面的例子中我们用到了$parsers这个属性和$setValidity()这个方法。$parsers里保存了一组function, 每当DOM里数据变化的时候, 这组function会被一次掉用。这里给了我们机会在用户修改了DOM里值的时候, 去对新输入的值做校验。具体的校验就是
if (fibonacci.indexOf(parseInt(viewValue)) >= 0) { ctrl.$setValidity('fibonacci', true); return viewValue; } else { ctrl.$setValidity('fibonacci', false); return undefined; }
标记一个model的值是否合法是通过方法 $setValidity 实现的。 这个方法有两个参数,第一个是验证器的名字, 这里我们起名叫fibonacci。 这个名字会被使用显示对于的出错信息就像我们在入门篇里用到的
myForm.personEmail.$error.required myForm.personEmail.$error.email
里面的email 或是required。
第二个参数是个boole, 就是用来标记是否合法的。return的值会传递给下一个 $parsers 里的function, 返回undefined的话会终止继续传递。
demo
- angularjs Form进阶
- AngularJS Form 进阶:远程校验和自定义输入项
- AngularJS Form 进阶:远程校验和自定义输入项
- angularjs进阶
- angularJs -- Form 随手笔记
- AngularJS提交form(1)
- Angularjs ng-form
- angularJS form表单验证
- angularjs form简单入门
- AngularJs 基础与进阶
- django进阶15 Form
- AngularJS form validation-表单验证
- 表单验证<AngularJs> form valid
- angularjs的form手动验证
- AngularJS进阶(二)AngularJS路由问题解决
- AngularJS进阶(十四)AngularJS灵异代码事件
- AngularJS指令进阶 -- ngModelController详解
- <<AngularJS入门与进阶>>笔记
- 理解$watch ,$apply 和 $digest --- 理解数据绑定过程
- 理解AngularJS的作用域Scope
- 解决ui-router插件的模板加载问题
- 2014-1-7 UI拖动框框架
- angular 上传文件
- angularjs Form进阶
- 十条看起来不错的编程观点
- 凸多面体
- FFRFFFFFFF
- PKU 2891:Strange Way to Express Integers(中国剩余定理非互质)
- angularjs的事件 $broadcast and $emit and $on
- bash shell脚本实用方法
- Lazy Loading In AngularJS
- AngularJS 学习笔记(邹业盛)