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 相关文章推荐
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
javascript数据类型验证方法
Dec 31 Javascript
微信小程序 网络API 上传、下载详解
Nov 09 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
JS请求servlet功能示例
Jun 01 Javascript
PHP7新特性简述
Jun 11 Javascript
使用vue-resource进行数据交互的实例
Sep 02 Javascript
在vue中高德地图引入和轨迹的绘制的实现
Oct 11 Javascript
ElementUI中el-tree节点的操作的实现
Feb 27 Javascript
Vue+element+cookie记住密码功能的简单实现方法
Sep 20 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 组件化编程技巧
2009/06/06 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
使用PHP编写的SVN类
2013/07/18 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python 功能和特点(新手必学)
2015/12/30 Python
玩转python爬虫之正则表达式
2016/02/17 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
python实现简单购物商城
2016/05/21 Python
Django卸载之后重新安装的方法
2017/03/15 Python
python 搜索大文件的实例代码
2019/07/08 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
解决Python二维数组赋值问题
2019/11/28 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
高三学习决心书
2014/03/11 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
社区两委对照检查材料
2014/08/23 职场文书
酒店端午节活动方案
2014/08/26 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
演讲开场白和结束语
2015/05/29 职场文书