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 ajax 调用失败的原因示例介绍
Sep 27 Javascript
JavaScript如何禁止Backspace键
Dec 02 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
Bootstrap媒体对象的实现
May 01 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
Aug 24 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 Javascript
JS实现马赛克图片效果完整示例
Apr 13 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插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
Python版的文曲星猜数字游戏代码
2013/09/02 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
浅析python继承与多重继承
2018/09/13 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
python实现自动打卡的示例代码
2020/10/10 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
应届生高等护理求职信
2013/10/12 职场文书
会议活动邀请函
2014/01/27 职场文书
捐款倡议书范文
2014/02/02 职场文书
化工实习心得体会
2014/09/09 职场文书
离婚协议书范本2014
2014/10/27 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python