angular-messages.js信息验证的使用

ngMessages(1.3+)

众所周知,表单和验证是Angular中复杂的组件之一。上面的例子不是特别好,不简洁。在
Angular 1.3发布前,表单验证必须以这种方式编写。
然而在发布的Angular 1.3中,Angular核心做了一个升级。它不再需要基于一个详细的表达式
状态创建元素显示或隐藏(正如我们在本章所做的那样)。

<form name="signup_form" novalidate ng-submit="signupForm()"
ng-controller="signupController">
<fieldset>
<legend>Signup</legend>
<div class="row">
<div class="large-12 columns">
<label>Your name</label>
<input type="text" placeholder="Name" name="name" ng-model="signup.name"
ng-minlength=3 ng-maxlength=20 required />
<div class="error" ng-show="signup_form.name.$dirty && signup_form.name.
$invalid && signup_form.submitted">
<small class="error" ng-show="signup_form.name.$error.required">
Your name is required.</small>
<small class="error" ng-show="signup_form.name.$error.minlength">
Your name is required to be at least 3 characters</small>
<small class="error" ng-show="signup_form.name.$error.maxlength">
Your name cannot be longer than 20 characters </small>
</div>
</div>
</div>
<button type="submit">Submit</button>
</fieldset>
</form>

本质上这一功能会检查错误对象的状态发生了变化。此外,我们还得到了站点中每个表单需
要的很多额外的和重复的标记。这显然不是一个理想的解决方案。
从1.3开始,Angular中新增了一个ngMessages指令。
安装
安装ngMessages很简单,因为它被打包成了一个Angular模块。首先下载这个模块:
$ bower install --save angular-messages
或者,也可以从angular.org下载该文件并将它保存到项目中。还需要将angular-messages.js这
个JavaScript引入我们的主HTML中:
<script type="text/javascript" src="bower_components/angular-messages/angular-messages.js">
</script>
最后,我们还要告诉Angular将ngMessages作为应用程序的依赖模块引入,就像这样:
angular.module(‘myApp‘, [‘ngMessages‘]);
现在,我们已经安装了ngMessages,然后可以马上开始使用它了。使用前面的例子作为基
础,你可以移除ng-show指令,然后使用ngMessages的一个更简洁的实现替换它。

<form name="signup_form" novalidate ng-submit="signupForm()"
ng-controller="signupController">

<label>Your name</label>
<input type="text" placeholder="Name" name="name" ng-model="signup.name" ng-minlength=
3 ng-maxlength=20 required />
<div class="error" ng-messages="signup_form.name.$error">
<div ng-message="required">Make sure you enter your name</div>
<div ng-message="minlength">Your name must be at least 3 characters</div>
<div ng-message="maxlength">Your name cannot be longer than 20 characters</div>
</div>
<button type="submit">Submit</button>
</form>

借助ngMessages,表本身比前面的实现更清洁,并且更好理解。
然而对于这个实现,一次只会显示一个错误消息。如果我们想要更新这个实现同时显示所有
的错误将会怎样?很容易。只需在ng-message指令旁边使用ng-messages-multiple属性即可。

<div class="error" ng-messages="signup_form.name.$error" ng-messages-multiple>
<div ng-message="required"> sure you enter your name</div>
<div ng-message="minlength">Your name must be at least 3 characters</div>
<div ng-message="maxlength">Your name cannot be longer than 20 characters</div>
</div>

很多时候这些信息相互之间非常相似。我们可以将它们保存到模板中从而减少麻烦,而不是
重新输入每个字段的错误信息。

<!-- In templates/errors.html -->
<div ng-message="required">This field is required</div>
<div ng-message="minlength">The field must be at least 3 characters</div>
<div ng-message="maxlength">The field cannot be longer than 20 characters</div>

然后我们可以通过在视图中使用ng-messages-include属性引入这个模板来改进这个表单:

<div class+‘error‘ ng-messages="signup_form.name.$error"
ng-messages-include="templates/errors.html">
</div>

有时,你可能希望为不同的字段自定义错误信息。没问题,你可以在这个指令内简单地插入
一个自定义错误信息。由于ngMessages涉及ngMessages容器中错误列表的顺序,我们可以通过
在这个指令中列出自定义错误信息的方式覆盖它们。

<div class="error" ng-messages="signup_form.name.$error"
ng-messages-include="templates/errors.html">
<!--除了minlength会被覆盖之外,其他每个信息都会保持不变-->
</div>

此外,甚至还可以为自定义验证创建自定义消息。可以通过修改模型的$ parsers链做到这
一点。
例如,比方说我们想要创建一个自定义验证器验证用户名在一个注册表单中是否有效:

app.directive(‘ensureUnipue‘, function($http) {
return {
require: ‘ngModel‘,
link: function(scope, ele, attrs, ctrl) {
ctrl.$parsers.push(function(val) {

// 在这里添加验证
});
}
}
});

对于ngModel,你可以添加可以使用ngMessage指令显示/隐藏的自定义信息。还可以添加可
以使用ngMessage指令检查的带有自定义的消息的指令。例如,改变前面使用ngMessages的例子。

<form name="signup_form" novalidate ng-submit="signupForm()" ng-controller="signupController"
ensure-unique="/api/checkUsername.json">
<label>
Your name
</label>
<input type="text" placeholder="Username" name="username" ng-model="signup.username"
ng-minlength=3 ng-maxlength=20 required />
<div class="error" ng-messages="signup_form.username.$error">
<div ng-message="required">
Make sure you enter your username
</div>
<div ng-message="checkingAvailability">
Checking...
</div>
<div ng-message="usernameAvailablity">
The username has already been taken. Please choose another
</div>
</div>
<button type="submit">
Submit
</button>
</form>

在这中用法中,我们检查了错误信息的自定义属性。为了添加自定义错误消息,我们将会把
它们应用到自定义ensureUnique指令的ngModel中。

app.directive(‘ensureUnique‘, function($http) {
return {
require: ‘ngModel‘,
link: function(scope, ele, attrs, ctrl) {
var url = attrs.ensureUnique;
ctrl.$parsers.push(function(val) {
if (!val || val.length === 0) {
return;
}
ngModel.$setValidity(‘checkingAvailability‘, true);
ngModel.$setValidity(‘usernameAvailablity‘, false);
$http({
method: ‘GET‘,
url: url,
params: {
username: val
}
}).success(function() {
ngModel
.$setValidity(‘checkingAvailability‘, false);
ngModel
.$setValidity(‘usernameAvailablity‘, true);

})[‘catch‘](function() {
ngModel
.$setValidity(‘checkingAvailability‘, false);
ngModel
.$setValidity(‘usernameAvailablity‘, false);
});
return val;
})
}
}
});
时间: 2024-12-08 16:46:37

angular-messages.js信息验证的使用的相关文章

js正则验证方法大全

js正则验证方法大全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

基于angular的表单验证实例

最近,在学习angular下面就和大家分享一个简单的表单验证实例 在分享实例之前先整理一下,一些基础知识 input元素上使用的所有验证选项: 1必填项  <input type="text"  required/> 2最小长度 <input type="text" ng-minlength="5"/> 3最大长度 <input type="text" ng-maxlength="20&

js正则表达式验证(化繁为简)

以前用js写正则表达式验证,每一个文本框后面都要添加一个onblur函数,验证的信息少,也没体会到有多繁琐,这次项目中的页面比较多,页面中的信息也比较多,如果每个文本框都加一个验证函数的话,js验证代码将会很长,很繁琐. 既然是函数,就可以传参数,这样的话,只需要一个验证函数就可以完成所有的信息验证了. 1.首先新建一个js文件validate.js 1 function validate(o,regex,backInfo){ 2 if(o.value != "" &&

namespace javascript ajaxform 功能以及客户端js自动验证

Ns.UI.AjaxForm = function () {     Ns.UI.Control.apply(this, arguments);     this.onError = null;     this.onSuccess = null;     this.onBeforSend = null;     this.onComplete = null;     this.successFn = "";     this.validateFn = "";   

JavaScript用户注册信息验证

用户注册信息验证是否正确 一.Javascript方式 二.正则表达式验证 应用正则表达式验证:用户名4-16位,字母开头:用户名4-16位,首字母大写:两次密码是否相同:电话号码11位,并以1开头:出生日期 在register.jsp脚本部分代码如下 <script language="JavaScript" type="text/javascript"> function check() { var name=document.getElementB

js 验证表单 js提交验证类

js 验证表单 js提交验证类 附加:js验证radio是否选择 <script language="javascript">function checkform(obj){for(i=0;i<obj.oo.length;i++)         if(obj.oo[i].checked==true) return true; alert("请选择")return false; }</script><form id="f

js正则表达式:验证邮箱格式、密码复杂度、手机号码、QQ号码

直接上代码 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

angularJS (2) angular.min.js

angular.min.js /* AngularJS v1.2.29 (c) 2010-2014 Google, Inc. http://angularjs.org License: MIT*/(function(V,W,v){'use strict';function z(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.a

js正则表达式验证

有时候会要验证自己写的正则表达式是否正确 所以写了这个小东西: demo:js正则表达式验证 html: 1 <h3>绿色表示匹配,红色表示不匹配</h3> 2 <label>请在下框填入正则表达式</label><br /> 3 4 <textarea id="regexp"></textarea><br /> 5 6 <label>请在下框填需要验证的式子</label