在对Angular.js中的自定义客户端验证进行一些基础研究时,我正在阅读ngModel.NgModelController文档,并发现以下隐藏线:
$ setValidity(validationErrorKey,isValid); 更改有效性状态,并通知表单。
可以在$ parsers / $ formatters中调用此方法。 但是,如果可能,请使用设计为自动调用此方法的ngModel。$ validators管道。
几个小时后,许多Google(和StackOverflow!)搜索后来,我在任何地方都找不到这个ngModel.$validators
管道。所有自定义验证示例均使用$parsers/$formatters
设置,如下所示:
link: function (scope, elem, attr, ctrl) {
// Other necessary logic...
ctrl.$parsers.push(function () {
// Validation logic
ctrl.$setValidity('validation-type', true);
});
ctrl.$formatters.push(function () {
// Validation logic
ctrl.$setValidity('validation-type', true);
});
},
问题:Angular文档指出上面的代码不是最佳做法,并且这个神秘的ngModel.$validators
pipline是正确的方法。我没有找到关于这种更好的做法的任何信息。如何使用ngModel.$validators
正确实现此自定义客户端验证?
答案 0 :(得分:22)
$validators
是Angular 1.3的新功能。这篇博文给出了如何使用它们的一个很好的解释:http://www.yearofmoo.com/2014/09/taming-forms-in-angularjs-1-3.html#the-validators-pipeline
基本思想是在ngModel.$validators
上添加一个返回boolean
的函数,指定模型是否有效。
然后,您可以像引用任何内置验证器一样在HTML中引用验证器。 e.g。
<div ng-if="myForm.myField.$error.myValidator">
some error message here
</div>