什么*是ngModel。$ validators管道?

时间:2014-09-10 15:14:42

标签: javascript angularjs validation

在对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正确实现此自定义客户端验证?

1 个答案:

答案 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>