编辑:下面添加了关于ngMessages (>= 1.3.X)的信息。
标准表单验证消息(1.0.;X及以上)
因为这是你谷歌“Angular Form Validation”得到的最多的结果之一,现在,我想为那些从那里来的人添加另一个答案。
FormController中有一个方法。$setValidity,但这看起来不像一个公共API,所以我宁愿不使用它。
这是“公开的”,不用担心。使用它。这就是它的作用。如果不打算使用它,Angular开发人员会在闭包中对它进行私有化。
要进行自定义验证,如果你不想像其他答案建议的那样使用Angular-UI,你可以简单地滚动你自己的验证指令。
app.directive('blacklist', function (){
return {
require: 'ngModel',
link: function(scope, elem, attr, ngModel) {
var blacklist = attr.blacklist.split(',');
//For DOM -> model validation
ngModel.$parsers.unshift(function(value) {
var valid = blacklist.indexOf(value) === -1;
ngModel.$setValidity('blacklist', valid);
return valid ? value : undefined;
});
//For model -> DOM validation
ngModel.$formatters.unshift(function(value) {
ngModel.$setValidity('blacklist', blacklist.indexOf(value) === -1);
return value;
});
}
};
});
下面是一些用法的例子:
<form name="myForm" ng-submit="doSomething()">
<input type="text" name="fruitName" ng-model="data.fruitName" blacklist="coconuts,bananas,pears" required/>
<span ng-show="myForm.fruitName.$error.blacklist">
The phrase "{{data.fruitName}}" is blacklisted</span>
<span ng-show="myForm.fruitName.$error.required">required</span>
<button type="submit" ng-disabled="myForm.$invalid">Submit</button>
</form>
注:在1.2。X,最好用ng-if代替上面的ng-show
这里是一个强制性的活塞链接
此外,我还写了一些关于这个主题的博客文章,内容更详细一些:
Angular表单验证
自定义验证指令
编辑:在1.3.X中使用ngMessages
现在你可以使用ngMessages模块来代替ngShow来显示错误消息。它实际上可以与任何东西一起工作,它不一定是一个错误消息,但这里是基本的:
包含<script src="angular-messages.js"></script> .js
在模块声明中引用ngMessages:
Var app = angular。模块(“myApp”,[' ngMessages ']);
添加适当的标记:
<表单名称= " personForm " >
<input type="email" name="email" ng-model="person. "电子邮件“要求/ >
< div ng-messages = " personForm.email。美元错误”>
需要< div ng-message = "需要" > < / div >
<div ng-message="email">无效邮件</div>
< / div >
> < /形式
在上面的标记中,ng-message="personForm.email。$error"基本上指定ng-message子指令的上下文。然后ng-message="required"和ng-message="email"指定要监视的上下文属性。最重要的是,它们还指定了办理入住的顺序。它在列表中发现的第一个“真实”的信息获胜,它将显示该信息,而不显示其他信息。
ngMessages示例的plunker