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 相关文章推荐
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 Javascript
如何让页面加载完成后执行js
Jun 26 Javascript
三种检测iPhone/iPad设备方向的方法
Apr 23 Javascript
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
Boostrap基础教程之JavaScript插件篇
Sep 08 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
JavaScript错误处理和堆栈追踪详解
Apr 18 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 Javascript
vue项目动态设置页面title及是否缓存页面的问题
Nov 08 Javascript
详解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中显示格式化的用户输入
2006/10/09 PHP
PHP Google的translate API代码
2008/12/10 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
Angular的$http与$location
2016/12/26 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
angular-tree-component的使用详解
2018/07/30 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
用Python中的字典来处理索引统计的方法
2015/05/05 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
Python实现的特征提取操作示例
2018/12/03 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
使用K.function()调试keras操作
2020/06/17 Python
Python如何执行系统命令
2020/09/23 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
法律专业学生的自我评价
2014/02/07 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2015年党小组工作总结
2015/05/26 职场文书
MyBatis 动态SQL全面详解
2021/10/05 MySQL
JS数组去重详情
2021/11/07 Javascript