Angular 访问角度窗体的嵌套控件
我正在将一个应用程序从Angular 2升级到Angular 7,看起来我的大多数表单都坏了。我有多个实例收到以下错误:Angular 访问角度窗体的嵌套控件,angular,forms,Angular,Forms,我正在将一个应用程序从Angular 2升级到Angular 7,看起来我的大多数表单都坏了。我有多个实例收到以下错误: Property 'controls' does not exist on type 'AbstractControl' 在这个特定的实例中,我有一个块,它似乎在循环并验证表单数组 for (let i = 0, len = this.form.controls[control].controls.length; i < len; i++) { this.for
Property 'controls' does not exist on type 'AbstractControl'
在这个特定的实例中,我有一个块,它似乎在循环并验证表单数组
for (let i = 0, len = this.form.controls[control].controls.length; i < len; i++) {
this.form.controls[control].controls[i].controls.ConditionTypeId.setValidators(Validators.required);
this.form.controls[control].controls[i].controls.ConditionTypeId.updateValueAndValidity();
this.form.controls[control].controls[i].controls.ToBeCompletedDate.setValidators(Validators.required);
this.form.controls[control].controls[i].controls.ToBeCompletedDate.updateValueAndValidity();
}
for(设i=0,len=this.form.controls[control].controls.length;i
自从Angular 2以来,嵌套表单/表单数组的工作方式是否发生了重大变化?如果是这样,对我来说,以这种方式重构任何处理嵌套表单的代码最有效的方法是什么?我不确定何时发生了变化,因为直到v4我才认真对待Angular。但我相信您的问题只是更严格的表单类的键入或重构。AbstractControl是这些表单类的通用抽象类。FormArray类扩展并添加了您要查找的
控件
属性。但是FormGroup.controls[…]
只返回一般的AbstractControl。因此,在尝试从中获取控件之前,必须将其强制转换为FormArray:
(this.form.controls[control] as FormArray).controls[i].controls...
更常见的模式是为特定数组创建一个getter,但是支持ts文件中的一个简单函数可能更适合您的情况:
getFormArray(controlName) {
return this.myForm.get(controlName) as FormArray;
}
看起来FormGroups被添加到了FormArray中,因此调用了
form.controls[…].controls[…].controls…
。您的两种解决方案都有效,但是我将尝试使用创建get方法的更优雅的解决方案。谢谢