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 相关文章推荐
在ASP.NET中使用JavaScript脚本的方法
Nov 12 Javascript
jQuery学习之prop和attr的区别示例介绍
Nov 15 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
Oct 27 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
Sep 19 Javascript
BootStrap Validator使用注意事项(必看篇)
Sep 28 Javascript
Vue方法与事件处理器详解
Dec 01 Javascript
Vue.js实现分页查询功能
Nov 15 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
原生js实现的金山打字小游戏(实例代码详解)
Mar 16 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
详解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
用session做客户验证时的注意事项
2006/10/09 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
Python编程中的文件操作攻略
2015/10/16 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python按钮的响应事件详解
2019/03/04 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
苹果台湾官网:Apple台湾
2019/01/05 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
学习全国两会精神心得体会范文
2014/03/17 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
现场活动策划方案
2014/08/22 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
天河观后感
2015/06/11 职场文书
2015年教师国培感言
2015/08/01 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python