无法使用 FormArray 进行反应式表单验证
Can't get reactive form validations to work using FormArray
我正在尝试使用一组 FormGroups 来验证我的表单。
它在添加 FormGroups 数组之前工作(material 步进器验证目的)。
HTML:
<form [formGroup]="formGroup" (ngSubmit)="submit()">
<mat-form-field>
<input matInput formControlName="fullName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls['fullName'].errors?.required">Required</mat-error>
</mat-form-field>
<mat-form-field>
<input matInput formControlName="shortName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls['shortName'].errors?.required">Required</mat-error>
</mat-form-field>
</form>
TS:
get formArray(): AbstractControl | null { return this.formGroup.get('formArray'); }
this.formGroup = this.fb.group({
formArray: this.fb.array([
this.fb.group({ fullName: [null, [Validators.required]] }),
this.fb.group({ shortName: [null, [Validators.required]] }),
])
});
我做错了什么?
你这里的数组是一组数组,你需要这样对待它,顺便说一句,这是一种奇怪的方式...
<form [formGroup]="formGroup" (ngSubmit)="submit()">
<ng-container formArrayName="formArray">
<mat-form-field formGroupName="1">
<input matInput formControlName="fullName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls[1].controls['fullName'].errors?.required">Required</mat-error>
</mat-form-field>
<mat-form-field formGroupName="2">
<input matInput formControlName="shortName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls[2].controls['shortName'].errors?.required">Required</mat-error>
</mat-form-field>
</ng-container>
</form>
所以我添加的是一个引用表单数组名称的容器,然后是指令让它知道数组中每个控件的 formGroupName(在 FormArray 的情况下是索引)。我还在您的验证检查中添加了一个步骤,我可以在其中访问 formarray 控件索引。我完全不确定您为什么需要或想要这种结构,但这现在可以使用了。
我正在尝试使用一组 FormGroups 来验证我的表单。
它在添加 FormGroups 数组之前工作(material 步进器验证目的)。
HTML:
<form [formGroup]="formGroup" (ngSubmit)="submit()">
<mat-form-field>
<input matInput formControlName="fullName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls['fullName'].errors?.required">Required</mat-error>
</mat-form-field>
<mat-form-field>
<input matInput formControlName="shortName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls['shortName'].errors?.required">Required</mat-error>
</mat-form-field>
</form>
TS:
get formArray(): AbstractControl | null { return this.formGroup.get('formArray'); }
this.formGroup = this.fb.group({
formArray: this.fb.array([
this.fb.group({ fullName: [null, [Validators.required]] }),
this.fb.group({ shortName: [null, [Validators.required]] }),
])
});
我做错了什么?
你这里的数组是一组数组,你需要这样对待它,顺便说一句,这是一种奇怪的方式...
<form [formGroup]="formGroup" (ngSubmit)="submit()">
<ng-container formArrayName="formArray">
<mat-form-field formGroupName="1">
<input matInput formControlName="fullName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls[1].controls['fullName'].errors?.required">Required</mat-error>
</mat-form-field>
<mat-form-field formGroupName="2">
<input matInput formControlName="shortName" required>
<mat-error *ngIf="formGroup.controls.formArray.controls[2].controls['shortName'].errors?.required">Required</mat-error>
</mat-form-field>
</ng-container>
</form>
所以我添加的是一个引用表单数组名称的容器,然后是指令让它知道数组中每个控件的 formGroupName(在 FormArray 的情况下是索引)。我还在您的验证检查中添加了一个步骤,我可以在其中访问 formarray 控件索引。我完全不确定您为什么需要或想要这种结构,但这现在可以使用了。