详解AngularJS中的表单验证(推荐)


Posted in Javascript onNovember 17, 2016

AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证

1.使用angularjs的表单验证

正则式验证

只需要配置一个正则式,很方便的完成验证,理论上所有的验证都可以用正则式完成

//javascript
$scope.mobileRegx = "^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\\d{8}$";
$scope.emailRegx = "^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$";
$scope.pwdRegx = "[a-zA-Z0-9]*";
<div class="form-group">
<input class="form-control" name="mobile" type="text" ng-model="account.mobile" required ng-pattern="mobileRegx"/>
<span class="error" ng-show="registerForm.$submitted && registerForm.mobile.$error.required">*手机号不能为空</span>
<span class="error" ng-show="registerForm.$submitted && registerForm.mobile.$error.pattern">*手机号地址不合法</span>
</div>
<input type="text" ng-pattern="/[a-zA-Z]/" />

数字

设置input的type=number即可

<div class="form-group col-md-6">
<label for="password">
预估时间
</label>
<div class="input-group">
<input required type="number" class="form-control" ng-model="task.estimated_time" name="time" />
<span class="input-group-addon">分钟</span>
</div>
<span class="error" ng-show="newTaskForm.$submitted && newTaskForm.time.$error.required">*请预估时间</span> 
</div>

邮箱

<input type="email" name="email" ng-model="user.email" />

URL

<input type="url" name="homepage" ng-model="user.facebook_url" />

效果

效果是实时的,很带感

详解AngularJS中的表单验证(推荐)

2.使用ngMessages验证表单

相对于上面的每个验证都要自己写代码判断,ngMessages提供了一种更为简洁的方式

https://docs.angularjs.org/api/ngMessages/directive/ngMessages

angular.module('ngMessagesExample', ['ngMessages']);
<form name="myForm">
<label>
Enter your name:
<input type="text"
name="myName"
ng-model="name"
ng-minlength="5"
ng-maxlength="20"
required />
</label>
<pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre>
<!--需要配合 ng-if使用,否则一开始就显示出来了, 你摸了就会触发验证--> 
<div ng-messages="myForm.myName.$error" style="color:maroon" role="alert" ng-if="myForm.myName.$touched">
<div ng-message="required">You did not enter a field</div>
<div ng-message="minlength">Your field is too short</div>
<div ng-message="maxlength">Your field is too long</div>
</div>
</form>

简直是第二次解放啊。。。

详解AngularJS中的表单验证(推荐)

2.动态生成的表单的验证

如果你有一部分form的内容是动态生成的,数量和名字都不确定的时候,该如何验证这些生成的元素呢?其实维护一个动态的form本来就是个问题。但是在angular中,只需要记住一点:准备好你的数据,其他的交给angular。像下面这个例子,你只需要维护好一个数组,然后利用ng-repeat就可以快速的呈现到页面上。

详解AngularJS中的表单验证(推荐)

详解AngularJS中的表单验证(推荐)

其实动态的form和一般的form验证都是一致的,只是动态的form需要使用myForm[inout_name].$error的形式访问

<!-- 动态显示状态的负责人 -->
<div class="form-group col-md-6" ng-repeat="sta in task.status_table | orderBy : sta.sequence_order">
<label>{{sta.status_name}} 负责人</label>
<select required class="form-control" ng-model="sta.user_id" ng-options="qa.id as qa.last_name+' '+qa.last_name for qa in taskUserList" name="{{sta.status_name}}">
</select>
<div ng-messages="newTaskForm[sta.status_name].$error" ng-if="newTaskForm.$submitted || newTaskForm[sta.status_name].$touched">
<p class="error" ng-message="required">*请选择负责人</p>
</div>
</div>

3. 必填项加亮显

有些表单我们不希望粗暴的在下面添加文字信息提示验证,而是希望更简洁的方式,如:加亮边框,突出显示

详解AngularJS中的表单验证(推荐)

需要做的只是在required验证没通过的时候添加class,改变元素的样式即可

<form name="loginForm" novalidate ng-submit="loginPost()" class="navbar-form navbar-right" ng-hide="login">
<fake-autocomplete></fake-autocomplete>
<div class="form-group">
<input name="user_name" required maxlength="50" type="text" class="form-control" placeholder="手机号或邮箱" ng-model="account.user_name" ng-class="{warn:loginForm.$submitted && loginForm.user_name.$error.required}">
</div>
<div class="form-group">
<input name="password" required type="password" maxlength="50" placeholder="密码" ng-model="account.password" ng-class="{'form-control':1,warn:loginForm.$submitted && loginForm.password.$error.required}">
</div>
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-lock"></span> 登录</button>
</form>
.warn {
border-color: #f78d8d !important;
outline: 0 !important;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgb(239, 154, 154) !important;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(239, 154, 154) !important;
}

以上所述是小编给大家介绍的详解AngularJS中的表单验证,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
在IE中调用javascript打开Excel的代码(downmoon原作)
Apr 02 Javascript
Jquery选择器 $实现原理
Dec 02 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
Sep 04 Javascript
理解javascript定时器中的单线程
Feb 23 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
JS实现网页端猜数字小游戏
Mar 06 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 #Javascript
用Vue.js实现监听属性的变化
Nov 17 #Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 #Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 #Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 #Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
Nov 17 #Javascript
leaflet的开发入门教程
Nov 17 #Javascript
You might like
pw的一个放后门的方法分析
2007/10/08 PHP
实用函数4
2007/11/08 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
javascript 对象的定义方法
2007/01/10 Javascript
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
解读Django框架中的低层次缓存API
2015/07/24 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
python定时关机小脚本
2018/06/20 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Python pip配置国内源的方法
2020/02/14 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
招聘专员岗位职责
2014/03/07 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
化工专业自荐书
2014/06/16 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
征求意见函
2015/06/05 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS