首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS:$parsers对$validators

AngularJS:$parsers对$validators
EN

Stack Overflow用户
提问于 2015-06-24 14:46:26
回答 1查看 2.8K关注 0票数 6

在AngularJS中,$parsers和$validators都可以用来验证表单。我想知道使用$parser和使用$validator到底有什么区别。

让我们看看下面的示例:

使用解析器的验证

代码语言:javascript
复制
angular.module("myFormApp")
    .directive("containsWhiteSpace", containsWhiteSpace);

function containsWhiteSpace () {

    function hasWhiteSpace(s) {
        return s.indexOf(' ') >= 0;
    }

    return {
        require: "ngModel",
        link: function(scope, ele, attrs, ctrl){

            ctrl.$parsers.unshift(function(value) {
                if(value){
                    var isValid = !hasWhiteSpace(value);
                    ctrl.$setValidity('hasWhiteSpace', isValid);
                }

                return isValid ? value : undefined;
            });

        }
    }
}

使用验证器进行验证

代码语言:javascript
复制
angular.module("myFormApp")
    .directive("containsWhiteSpace", containsWhiteSpace);

function containsWhiteSpace () {

    function hasWhiteSpace(s) {
        return s.indexOf(' ') >= 0;
    }

    return {
        require: "ngModel",
        link: function(scope, ele, attrs, ctrl){
            ctrl.$validators.hasWhiteSpace = function(value){
                return !hasWhiteSpace(value);
            }
        }
    }
}

它们都做同样的事情,但是什么时候使用解析器是正确的,何时使用验证器是正确的呢?两者的优点是什么?有什么不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 00:13:59

$parsers在管道中运行,以转换输入值。如果无法解析输入,则可以返回undefined,这表示解析错误。如果输入值无法解析,则不会运行验证器。

$validators在解析值上在解析器之后运行。它们可以返回false以指示数据错误。

基本上

  • 使用解析器将字符串输入值强制输入到所需/预期的数据类型中。
  • 使用验证器验证正确数据类型的值。

例如,考虑一个需要正数的模型。$parsers可以对值调用parseFloat$validators可以检查值是否为正。

举个例子,我认为$validators更合适(也更干净)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31029756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档