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 相关文章推荐
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
jQuery中triggerHandler()方法用法实例
Jan 19 Javascript
初识Javascript小结
Jul 16 Javascript
Node.js实现数据推送
Apr 14 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
node app 打包工具pkg的具体使用
Jan 17 Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
Jul 29 Javascript
js 执行上下文和作用域的相关总结
Feb 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
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python中文字符串截取问题
2015/06/15 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
selenium+python实现自动登录脚本
2018/04/22 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
Python如何合并多个字典或映射
2020/07/24 Python
会话Bean的种类
2013/11/07 面试题
关于礼仪的演讲稿
2014/01/04 职场文书
保护环境的建议书
2014/03/12 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
工作简报格式范文
2015/07/21 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书