Angular 2+ 自定义验证器 "required if"另一个字段已填写

标签 angular validation typescript angular2-forms

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

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

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

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

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

非常感谢任何指点!

最佳答案

我认为你可以在没有自定义验证器的情况下实现你想要的。

下面的代码来自模板驱动的表单 - 将第二个字段上的 required 验证程序指令绑定(bind)到第一个字段的 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>

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

关于Angular 2+ 自定义验证器 "required if"另一个字段已填写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310584/

相关文章:

angular - ionic 4/5 使用 ngx-translate 自动添加到 i18n 中的字幕文件

angularjs - 动态地将 Angular2 组件附加到 dom

angular - HttpClient 无法忽略或绕过自签名证书错误

angular - 何时在angular中使用waitForAsync

php - 在 Symfony 3 中为集合的每个元素应用特定的验证组

javascript - 不推荐使用 Rxjs toPromise()

angular - 如何从子组件更改父变量?

java - Spring Web Mvc REST 验证

javascript - 验证文本框中的数值

typescript - vue-cli 构建失败并出现编译错误