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计数器代码
Nov 04 Javascript
input的focus方法使用
Mar 13 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
AngularJS 模块详解及简单实例
Jul 28 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
Nov 18 Javascript
AngularJS实现ajax请求的方法
Nov 22 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
JS排序之冒泡排序详解
Apr 08 Javascript
js实现图片轮播效果学习笔记
Jul 26 Javascript
axios向后台传递数组作为参数的方法
Aug 11 Javascript
Node.js之删除文件夹(含递归删除)代码实例
Sep 09 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读取csv实现csv文件下载功能
2013/12/18 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
Open and Print a Word Document
2007/06/15 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
javascript计时器详解
2015/02/28 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
python读取和保存视频文件
2018/04/16 Python
python 拼接文件路径的方法
2018/10/23 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
国旗下的演讲稿
2014/05/08 职场文书
运动会方队口号
2014/06/07 职场文书
幼儿发展评估方案
2014/06/11 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python