AngularJS使用ngMessages进行表单验证


Posted in Javascript onDecember 27, 2015

AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

名称为"ngMessages"的module,通过npm install angular-messages进行安装。在没有使用ngMessages之前,我们可能这样写验证:

<form name="userForm">
<input 
type="text" 
name="username" 
ng-model="user.username" 
ng-minlength="3" 
ng-maxlength="8"
required>
<p ng-show="userForm.username.$error.minlength">Username is too short.</p>
<p ng-show="userForm.username.$error.maxlength">Username is too long.</p>
<p ng-show="userForm.username.$error.required">Your username is required.</p>
</form>

以上,列举了每种可能的验证失败,并且手工编写是否显示错误提示信息。

有了"ngMessages"这个module,大致这么写:

<div class="help-block" ng-messages="userForm.name.$error" ng-if="userForm.name.$touched">
<p ng-message="minlength">用户名最小长度5</p>
<p ng-message="maxlength">用户名最大长度10</p>
<p ng-message="required">用户名必填</p>
</div>

ngMessages为我们自动判断显示哪种错误。

使用ngMessages的几个关键点:

● npm install angular-messages
● 引用:angular-messages.js
● 依赖:angular.module('app',['ngMessages'])

这里有一个简单的Demo,文件结构:

node_modules/
app.js
emailmessages.html
index.html

安装如下:

npm install bootstrap
npm install angular
npm install angular-messages

==index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css"/>
<style>
body{
padding-top: 50px;
}
</style>
</head>
<body class="container" ng-app="app" ng-controller="MainCtrl as main">
<form name="userForm" novalidate>
<div class="form-group" ng-class="{'has-error':userForm.name.$touched && userForm.name.$invalid}">
<label>用户名</label>
<input type="text" name="name" class="form-control"
ng-model="main.name"
ng-minlength="5"
ng-maxlength="10" required/>
<div class="help-block" ng-messages="userForm.name.$error" ng-if="userForm.name.$touched">
<p ng-message="minlength">用户名最小长度5</p>
<p ng-message="maxlength">用户名最大长度10</p>
<p ng-message="required">用户名必填</p>
</div>
</div>
<div class="form-group" ng-class="{'has-error':userForm.email.$touched && userForm.email.$invalid}">
<label>邮箱</label>
<input type="email" name="email" class="form-control"
ng-model="main.email"
ng-minlength="5"
ng-maxlength="20" required/>

<div class="help-block" ng-messages="userForm.email.$error" ng-if="userForm.email.$touched">
<div ng-messages-include="emailmessages.html"></div>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-danger">提交</button>
</div>
<pre>{{userForm.name.$error}}</pre>
<pre>{{userForm.email.$error}}</pre>
</form>
<script src="node_modules/angular/angular.min.js"></script>
<script src="node_modules/angular-messages/angular-messages.js"></script>
<script src="app.js"></script>
</body>
</html>

app.js

angular.module('app',['ngMessages'])
.controller('MainCtrl', MainCtrl);
function MainCtrl(){
}

emailmessages.html

把有关email的表单验证放在这里,通过<div ng-messages-include="emailmessages.html"></div>显示到页面某个位置上。

<p ng-message="required">邮箱必填</p>
<p ng-message="minlength">邮箱长度太短</p>
<p ng-message="maxlength">邮箱长度太长</p>
<p ng-message="email">邮箱无效</p>

ps:常用的表单验证指令

1. 必填项验证

某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:

<input type="text" required />

2. 最小长度

验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}":

<input type="text" ng-minlength="5" />

3. 最大长度

验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength="{number}":

<input type="text" ng-maxlength="20" />

4. 模式匹配

使用ng-pattern="/PATTERN/"来确保输入能够匹配指定的正则表达式:

<input type="text" ng-pattern="/[a-zA-Z]/" />

5. 电子邮件

验证输入内容是否是电子邮件,只要像下面这样将input的类型设置为email即可:

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

6. 数字

验证输入内容是否是数字,将input的类型设置为number:

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

7. URL

验证输入内容是否是URL,将input的类型设置为 url:

<input type="url" name="homepage" ng-model="user.facebook_url" />
Javascript 相关文章推荐
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 Javascript
js实现的切换面板实例代码
Jun 17 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
Jan 02 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
js实现在网页上简单显示时间的方法
Mar 02 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
Jul 20 Javascript
在vue项目中正确使用iconfont的方法
Sep 28 Javascript
vue实现div拖拽互换位置
Jul 29 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
如何解决jQuery 和其他JS库的冲突
Jun 22 jQuery
详解maxlength属性在textarea里奇怪的表现
Dec 27 #Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 #Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 #Javascript
JavaScript的removeChild()函数用法详解
Dec 27 #Javascript
JavaScript构造函数详解
Dec 27 #Javascript
JavaScript生成二维码图片小结
Dec 27 #Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 #Javascript
You might like
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
js实现简单的秒表
2020/01/16 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
浅谈Python的文件类型
2016/05/30 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
如何手工释放资源
2013/12/15 面试题
大学新生军训感言
2014/02/25 职场文书
生物制药专业求职信
2014/03/11 职场文书
《春笋》教学反思
2014/04/15 职场文书
个人借款协议书范本
2014/11/17 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript