【问题标题】:Angular 2+ custom validator "required if" another field is filled in如果填写了另一个字段,则Angular 2+自定义验证器“必需”
【发布时间】:2018-02-28 20:06:26
【问题描述】:

我正在尝试为模板驱动的表单创建一个自定义验证器,如果一个字段填写另一个字段,则需要填写另一个字段,但如果第一个字段为空,则第二个字段也不需要。

按照文档中的(打字稿)示例构建自定义验证器指令,我可以让它在一个字段上运行,并将另一个字段的名称传递给它。现在这是我的问题...

如果在字段 1 中输入了一个值,并且我检查了字段 2 是否为空,如何在字段 2 上设置“无效”? (我意识到我可以访问它的 AbstractControl)。

如果我自己在字段 2 上设置了“无效”,我是否需要在字段 2 上设置单独的验证器以在填写时消除其无效状态?

或者当字段 1 的验证器被触发时,我应该在字段 2 上添加内置的“必需”验证器(如果是这样的话)?

非常感谢您的任何指点!

【问题讨论】:

    标签: angular validation typescript angular2-forms


    【解决方案1】:

    我认为您可以在没有自定义验证器的情况下实现您所追求的目标。

    下面的代码来自模板驱动的表单 - 将第二个字段上的 required 验证器指令绑定到第一个字段的 ngModel 值。因此,当第一个字段有值时,您将条件验证应用于第二个字段。

    First: <input type="text" name="first" [(ngModel)]="theFirst" #first="ngModel" >
    
    Second: <input type="text" ngModel [required]="theFirst ? true : null " #second="ngModel" name="second"/>
    
    <div *ngIf="second.errors">
      <span [hidden]="!second.errors.required">Second is required</span>
    </div>
    

    关于条件验证绑定的进一步讨论是here

    【讨论】:

    • 您也可以通过将条件放在 div 中来跳过 [hidden] 部分:
      需要第二个
    • @danpop 是的,这是正确的 - 我想我在回答这个问题时引用了 Angular Template Forms doco - 这里他们使用 [hidden] 而不是从 dom 中删除元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2019-10-08
    • 2013-01-06
    • 2011-01-11
    相关资源
    最近更新 更多