什么是ngModel$验证器管道

What *is* the ngModel.$validators pipeline?

本文关键字:管道 验证 ngModel 什么      更新时间:2023-09-26

在Angular.js中对自定义客户端验证进行一些基础研究时,我正在阅读ngModel.NgModelController文档,发现了以下隐晦的行:

$setValidity(validationErrorKey,isValid);更改有效状态,并通知表单。

这个方法可以在$parsers/$formatters中调用但是,如果可能的话,请使用ngModel$validators管道,用于自动调用此方法

几个小时后,经过多次谷歌(和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管道是正确的做法。我没有找到任何关于这种更好做法的信息。如何使用ngModel.$validators来正确实现这种自定义客户端验证?

$validators是Angular 1.3的新版本。这篇博客文章很好地解释了如何使用它们:http://www.yearofmoo.com/2014/09/taming-forms-in-angularjs-1-3.html#the-验证器管道

基本思想是在ngModel.$validators上添加一个函数,该函数返回指定模型是否有效的boolean

然后,您可以在HTML中引用该验证器,就像引用任何内置验证器一样。例如

<div ng-if="myForm.myField.$error.myValidator">
    some error message here
</div>