typescript 尝试理解如何使用FormArray

j2cgzkjk  于 2023-04-13  发布在  TypeScript
关注(0)|答案(1)|浏览(131)

如果我这样做:

this.formArray = new FormArray([
  new FormControl(''),
  new FormControl(''),
]);

formControlA() {
  return this.formArray.at(0);
}

formControlB() {
  return this.formArray.at(1);
}

然后有一个模板使用:

<mat-select [formControl]="formControlA>...</mat-select>
<mat-select [formControl]="formControlB>...</mat-select>

我得到:
类型“AbstractControl〈any,any〉"缺少类型”FormControl“中的以下属性:defaultValue、registerOnChange、registerOnDisabledChange
我不明白---为什么FormArray上的.at()返回AbstractControl而不是FormControl,它实际上是用FormControl示例化的?
我以为选角不好?我不明白我怎么能在不选角的情况下做这类事情?

formControlA() {
  return this.formArray.at(0) as unknown as FormControl;
}
unhi4e5o

unhi4e5o1#

AbstractControl至少有3个内置子类:

  • FormControl
  • FormArray
  • FormGroup

在一些用例中,this.formArray.at(0)可以合法地返回FormGroupFormArray(例如,如果您嵌套一些表单)。
由于不能保证this.formArray.at(0)FormControl,因此必须进行强制转换。
有一个例外:如果你事先知道FormControl的数量(但我不明白为什么在这种情况下你需要一个FormArray),你仍然可以单独示例化FormControl变量:

formControlA = new FormControl();
formControlB = new FormControl();
formArray = new FormControl([formControlA, formControlB])

相关问题