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 实现的自定义对话框
Mar 24 Javascript
javascript offsetX与layerX区别
Mar 12 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 Javascript
移动设备web开发首选框架:zeptojs介绍
Jan 29 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 Javascript
ajax如何实现页面局部跳转与结果返回
Aug 24 Javascript
javascript匀速运动实现方法分析
Jan 08 Javascript
js数组去重的hash方法
Dec 22 Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
基于Axios 常用的请求方法别名(详解)
Mar 13 Javascript
Node.js中的cluster模块深入解读
Jun 11 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 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下获取客户端ip地址的函数
2010/03/15 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
详谈JavaScript的闭包及应用
2017/01/17 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python使用gensim计算文档相似性
2016/04/10 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
详解python 注释、变量、类型
2018/08/10 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
详解python中的数据类型和控制流
2019/08/08 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
十八大闭幕感言
2014/01/22 职场文书
期中考试后的反思
2014/02/08 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
2016年元旦致辞
2015/08/01 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
php修改word的实例方法
2021/11/17 PHP