如何手动触发Angular 2输入验证?

Sli*_*kas 23 javascript typescript angular

我有两个输入: - 第一个我应用我的自定义验证器 - 第二个我在自定义验证器中使用的值(它是动态和可编辑的)

如果我在第一个输入上应用我的自定义验证器,那么我将关注第二个并更改值 - 我想强制第一个输入重新验证...

目前,当我更改值时,它只会重新验证第一个输入...有什么建议吗?

在我关注第一个输入的那一刻,我可以访问它的参考:

            <input
              name="mEnd"
              class="form-control"
              [(ngModel)]="endDate"
              ...
              #endDateInput="ngModel"
              (focus)="clog(endDateInput)"
            >
Run Code Online (Sandbox Code Playgroud)

我想知道我可以使用输入formControl引用方法触发重新验证吗?

Rob*_*hof 50

您可以更新formControl的有效性

form.controls['myControl'].updateValueAndValidity();

  • 但是在 formGroup 上调用它不会检查每个控件,只会检查父控件。 (8认同)
  • 有没有办法为表单中的所有表单控件触发它而不必循环它们? (4认同)

C.I*_*ngo 10

我发现这要好得多

this.myForm.markAllAsTouched();
Run Code Online (Sandbox Code Playgroud)

  • 请解释一下,为什么这样会更好?将未触及的字段标记为已触及确实可以实现验证,但成本较高 - 并且它会错误地将字段标记为已触及。 (4认同)
  • 收到此错误:“FormGroup”类型上不存在属性“markAllAsTouched”,不确定什么类型应该是“this.myForm” (3认同)

Mar*_*lyk 5

如果您具有模板驱动的表单,则可以访问引发ViewChild装饰器的表单:

@ViewChild('myForm') public form: NgForm;
Run Code Online (Sandbox Code Playgroud)

然后,使用上述方法验证一个字段或整个表单组:

this.form.controls.myControl.updateValueAndValidity();
Run Code Online (Sandbox Code Playgroud)