AngularJS表单验证功能分析


Posted in Javascript onMay 26, 2017

本文实例讲述了AngularJS表单验证功能。分享给大家供大家参考,具体如下:

在AngularJS的管辖下,每个表单form都会创建一个ngFormController的一个实例。在表单里面的每个input都会创建一个在这个实例下的ngModelController实例,用以控制每个input的行为。

首先先从简单的验证开始。

AngularJs的ngModelController提供了几种属性:$pristine;$dirty;$valid;$invalid;$error

pristine:表单并没有改变。
dirty:表单改变了。
valid:全部控件符合验证规则。
invalid:至少有一个控件不符合验证规则。
error:有错,但是不知道什么错。

创建一个表单如下:

<form name="userForm" method="#" action="#">
  <label for="name">用户名1</label>
  <input id="name" name="name" type="text" ng-model="users.name" pattern="^\w{6,18}$" required>
  <span ng-show="userForm.name.$error.pattern">用户名必须XXXX</span>
</form>

首先每个form都要有自己的name。通过这个name来对自己下面的input进行控制。而后,每个input标签都要有自己的name。name是很关键的一步,被用于识别每个不同的input,从而识别不同的ngModelController。使用pattern来设置自己的正则表达式规则。使用$error来检测这个正则表达式是否正确。并把它赋予给ng-show指令。如果有错,整个$error 就会返回true,显示设置好的提示信息,一直到正则表达式通过,$error返回false,ng-show 对其进行隐藏。

以上的简单例子是没有自己去重新设置控制器的行为,一切都是AngularJs默认的。可以看到ng-show里面的判断代码其实是可以交给后面的JS完成的,这样可以看到ngModelController的具体过程。

<!--html-->
<form name="userForm" ng-controller="main" method="#" action="#">
  <label for="name">用户名1</label>
  <input id="name" name="name" type="text" ng-model="users.name" pattern="^\w{6,18}$" required>
  <span style="color:red" ng-show="showError(userForm.name,'pattern')">用户名必须XX</span>
  <span style="color:green" ng-show="showSuccess(userForm.name)">成功!</span>
  <!--对按钮进行动态锁定-->
  <button class="btn btn-primary btn-lg" ng-disabled="submit(userForm)">SAVE</button>
</form>
/*JS*/
app.controller("main",function($scope){
  $scope.showError=function(ngModelController,abc){
    return ngModelController.$error[abc];
  };
  $scope.showSuccess=function(ngModelController){
    return ngModelController.$valid; /*至少有1错误,返回false,无错误,返回true*/
  };
   $scope.submit=function(ngFormController){
    return ngFormController.$invalid; /*valid的取反*/
  };
});

这里直接在控制器里面的ngModelController里进行判断。里面有一个坑,就是判断$valid 等等这类属性是没有带参数的。而判断$error 则需要表明“判断什么”,我传了自己的一个正则表达式给他。

AngularJs还可以对表单的提交按钮进行“锁定”。但要注意的是,此时BUTTON对应的Controller不再是针对某一个input的ngModelController,而是针对整个form的ngFormController了,因此,里面的$invalid 是判断所有的input有没有问题,全部都没问题的时候才会解锁。

思考:正则表达式或者minlength类似这种限制,能否写在JS文件里面。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
用JQuery实现全选与取消的两种简单方法
Feb 22 Javascript
JS实现关键字搜索时的相关下拉字段效果
Aug 05 Javascript
AngularJS表格详解及示例代码
Aug 17 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
angular实现IM聊天图片发送实例
May 08 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 jQuery
js异步上传多张图片插件的使用方法
Oct 22 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 Javascript
vue项目出现页面空白的解决方案
Oct 31 Javascript
node后端服务保活的实现
Nov 10 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 #Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
May 26 #Javascript
BootStrap中的Fontawesome 图标
May 25 #Javascript
Vue.js 中的 $watch使用方法
May 25 #Javascript
详解Javascript获取缓存和清除缓存API
May 25 #Javascript
Angularjs 实现动态添加控件功能
May 25 #Javascript
JavaScript实现自动跳转文本功能
May 25 #Javascript
You might like
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
php while循环得到循环次数
2013/10/26 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
JavaScript中的私有成员
2006/09/18 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python 表格打印代码实例解析
2019/10/12 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python中rb含义理解
2020/06/18 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
flask框架中的cookie和session使用
2021/01/31 Python
物流专业大学生求职信范文
2013/10/28 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
教学评估实施方案
2014/03/16 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
实习协议书范本
2014/09/25 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python