【问题标题】:How to add directive for extra validation properly in angular?如何在角度中正确添加额外验证指令?
【发布时间】:2014-10-27 18:47:54
【问题描述】:

我需要什么:我需要通过向此输入添加属性来为输入添加额外的验证。

首先,我的 plnkr 示例是 here

我尝试了什么?:我添加了指令,所以当我向输入添加属性时,输入的值正在通过正则表达式^5$ 进行验证。另外,我在输入中添加了 required 。我现在谈论的是第二个输入(输入的名称是input2)。

所以,我添加了属性“my-attribute”和“required”。当输入中没有任何内容时,我希望 myForm.item[1].$error 中有两个项目:没关系 - 有属性 myAttributerequired。现在,我将在 input2 中添加一些,例如“abc”,现在我希望在 myForm.item[1].$error 中只有 myAttribute 属性(因为所需的验证通过了,但 myAttribute 验证没有通过),但是有属性 @987654332 @ 和 parsemyForm.item[1].$error。什么是parse 属性?为什么要添加到$error

我应该注意到,当我将 5 放入 input2 时,myForm.item[1].$error 是空的,因为 require 和 myAttribute 验证都通过了(并且这种行为是预期的)。

现在,当我清除 input2 时,属性 parsemyAttribute 再次出现。为什么?当字段 input2 为空时,我希望 myForm.item[1].$error 中有 requiredmyAttribute,但没有。

那么,为什么我在 $error 中得到奇怪的属性 parse 以及如何使我的示例正常工作?

表单示例代码创建于here,并且通过指令验证输入的方法是响应this post而创建的。

【问题讨论】:

    标签: javascript regex angularjs validation angularjs-directive


    【解决方案1】:

    什么是解析属性?为什么它会添加到 $error 中?

    当其中一个解析器返回undefined 时,Angular 会自动添加parse 属性。 来自Angular documentation

    从解析器返回 undefined 意味着发生了解析错误。不 $validators 将运行并且 'ngModel' 将不会更新,直到 解析错误已解决。解析错误存储在 'ngModel.$error.parse'。

    不确定我是否在这里遗漏了一些用例,但从解析器更改 return 子句就足够了:

    //For DOM -> model validation
    ngModel.$parsers.unshift(function(value) {
      var valid = new RegExp("^5$").test(value);
      ngModel.$setValidity('myAttribute', valid);
      return value;
    });
    

    【讨论】:

    • 关于解析好了。但是,有 required 属性,我需要先使用 required 。当表单为空白时,肯定有两个属性出错:required 和 myAttribute,对吧?为什么不?两个验证都没有通过。好的解析,好的 myAttribute 但需要呢?
    • “当表单为空白时,肯定有两个属性出错:required 和 myAttribute,对吗?” 是的,这就是我得到的。你看到的不一样吗?这不是预期的行为吗?
    • 不,当表单为空白时(不是第一次加载,而是在输入一些内容并清除输入后)我看不到相同
    • 请使用此plunkr 进行测试。我无法复制这种行为。当我插入然后清理其中一个输入时,require 属性出现在$error 列表中。
    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多