详解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 相关文章推荐
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
javascript的事件触发器介绍的实现
Jun 05 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
May 03 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
node.js+captchapng+jsonwebtoken实现登录验证示例
Aug 17 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
微信小程序自定义轮播图
Nov 04 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
Express 配置HTML页面访问的实现
Nov 01 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
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
python字典基本操作实例分析
2015/07/11 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python argparse模块应用实例解析
2019/11/15 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Python datetime 如何处理时区信息
2020/09/02 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
企划专员岗位职责
2013/12/09 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
感恩的演讲稿
2014/05/06 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python