什么*是ngModel.$ validators管道?

And*_*ray 24 javascript validation angularjs

在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);
    });
},
Run Code Online (Sandbox Code Playgroud)

问题: Angular文档指出上述代码不是最佳实践,并且这个神秘的ngModel.$validatorspipline是正确的方法.我没有找到关于这种更好的做法的任何信息.如何使用ngModel.$validators正确实现此自定义客户端验证?

rob*_*rob 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中引用该验证器.例如

<div ng-if="myForm.myField.$error.myValidator">
    some error message here
</div>
Run Code Online (Sandbox Code Playgroud)