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 获取链接(url)参数的方法
Feb 15 Javascript
基于jquery用于查询操作的实现代码
May 10 Javascript
JS中动态添加事件(绑定事件)的代码
Jan 09 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
Sep 28 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
vue.js实现的绑定class操作示例
Jul 06 Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
实例讲解JavaScript 计时事件
Jul 04 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
读jQuery之八 包装事件对象
2011/06/21 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
JavaScript实现百度搜索框效果
2020/03/26 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python open()文件处理使用介绍
2014/11/30 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
园林设计师自荐信
2013/11/18 职场文书
小学一年级学生评语
2014/04/22 职场文书
公司建议书怎么写
2014/05/15 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
机关作风建设自查报告
2014/10/22 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
初中同学会致辞
2015/08/01 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
MySQL插入数据与查询数据
2022/03/25 MySQL
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏