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 相关文章推荐
JS中使用sort结合localeCompare实现中文排序实例
Jul 23 Javascript
JavaScript函数定义的常见注意事项小结
Sep 16 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
js实现图片放大展示效果
Aug 30 Javascript
实例详解Node.js 函数
Jun 10 Javascript
js字符串类型String常用操作实例总结
Jul 05 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
js通过canvas生成图片缩略图
Oct 02 Javascript
基于vue实现微博三方登录流程解析
Nov 04 Javascript
微信小程序弹窗禁止页面滚动的实现代码
Dec 30 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
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python网络编程示例(客户端与服务端)
2014/04/24 Python
仅利用30行Python代码来展示X算法
2015/04/01 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
python实现同一局域网下传输图片
2020/03/20 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
武汉东之林科技有限公司机试
2013/09/17 面试题
天网工程实施方案
2014/03/26 职场文书
个人委托书范本
2014/04/02 职场文书
活动总结怎么写
2014/04/28 职场文书
品酒会策划方案
2014/05/26 职场文书
本科毕业生自荐信
2014/06/02 职场文书
班级口号大全
2014/06/09 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
2015年导购员工作总结
2015/04/25 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书