Javascript 如何手动触发角度2输入验证?

Javascript 如何手动触发角度2输入验证?,javascript,angular,typescript,Javascript,Angular,Typescript,我有两个输入: 我应用自定义验证器的第一个 我在自定义验证器中使用的第二个值(它是动态的和可编辑的) 如果我在第一个输入上应用我的自定义验证器,那么我关注第二个输入并更改值-我想强制第一个输入重新验证 目前,当我更改值时,它只会重新验证第一个输入。。。有什么建议吗 当我聚焦第一个输入时,我可以访问它的参考: <input name="mEnd" class="form-control" [(ngModel)]="

我有两个输入:

  • 我应用自定义验证器的第一个
  • 我在自定义验证器中使用的第二个值(它是动态的和可编辑的)
如果我在第一个输入上应用我的自定义验证器,那么我关注第二个输入并更改值-我想强制第一个输入重新验证

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

当我聚焦第一个输入时,我可以访问它的参考:

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


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

您可以更新formControl的有效性


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

如果您有模板驱动的表单,则可以访问表单抛出视图子装饰器:

@ViewChild('myForm') public form: NgForm;
然后,使用上述方法验证一个字段或整个表单组:

this.form.controls.myControl.updateValueAndValidity();

我觉得这样好多了

this.myForm.markAllAsTouched();

你为此写过代码吗?那么,请在此分享,有没有一种方法可以在不必循环的情况下为表单中的所有表单控件触发该方法???@Gagan该方法在formGroup上也可用,但在formGroup上调用该方法不会检查每个控件,只检查父控件。但请注意,在更改事件中调用该方法,FormControl尚未更新其值。因此,您的验证器可能无法按预期运行。例如:一个下拉列表更改,使用此新值验证其他输入请解释,为什么这样更好?将未接触的字段标记为已接触的字段确实可以实现验证,但成本更高,而且会错误地将字段标记为已接触的字段。您能解释一下为什么这种方法是错误的吗??我发现这有时很有用=/@HenryLowCZ,因为您切换toucted标志,其目的是指示用户已聚焦该字段,当您通过编程方式触发它时,情况可能并非如此。可能还有其他逻辑会规避触摸标志并被误导。获取此错误:
类型“FormGroup”上不存在属性“markAllAsTouched”
不确定应该是什么类型
此。myForm
这正是我需要的。它有助于显示表单加载后需要哪些字段。