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压缩利器
Feb 20 Javascript
JavaScript Undefined,Null类型和NaN值区别
Oct 22 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
Dec 03 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
jQuery实现动态控制页面元素的方法分析
Dec 20 jQuery
vue进行图片的预加载watch用法实例讲解
Feb 07 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 Javascript
vue路由权限校验功能的实现代码
Jun 07 Javascript
vue项目中js-cookie的使用存储token操作
Nov 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读写文件的方法(生成HTML)
2006/11/27 PHP
php 远程图片保存到本地的函数类
2008/12/08 PHP
PHP 木马攻击防御技巧
2009/06/13 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
理解javascript async的用法
2017/08/22 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python删除过期log文件操作实例解析
2018/01/31 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
产品工艺师的岗位职责
2013/11/15 职场文书
商场端午节活动方案
2014/01/29 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android