Я использую массив форм в первый раз, пожалуйста, потерпите меня, если что-то легко, и я не получаю его.
Я пробовал много вещей в этой форме, чтобы мое добавление могло работать, но оно выдает ошибку проверки для всех полей одновременно. Я знаю, что будет использоваться индекс, но не могу понять, как его использовать, и после успешной проверки я должен распечатать данные из этого поля, чтобы проверить, правильно ли создан массив.
<form [formGroup]="form">
<div class="form-row">
<div class="form-group my-sm-3 col">
<mat-form-field>
<input matInput placeholder="No. of Periods" type="text" [formControl]="periodT"
[errorStateMatcher]="matcher" autocomplete="off" maxlength="2">
<mat-error *ngIf="periodT.hasError('required')">
This field is <strong>required</strong>
</mat-error>
<mat-error *ngIf="periodT.hasError('maxlength') && !periodT.hasError('required')">
This field is <strong>maximum 3 character long</strong>
</mat-error>
<mat-error *ngIf="periodT.hasError('pattern') && !periodT.hasError('required')">
This field is <strong>should be numeric</strong>
</mat-error>
<mat-error *ngIf="periodT?.errors?.invalid">
{{periodT?.errors?.invalid}}
</mat-error>
</mat-form-field>
</div>
</div>
<div formArrayName="breakList">
<div *ngFor="let breakL of breakForms.controls; let i=index" [formGroupName]="i" class="form-row">
<div class="row">
<div class="col-md-5">
<mat-form-field>
<input matInput placeholder="Break Timing" type="text" [formControl]="BreakT" autocomplete="off"
maxlength="2">
<mat-error *ngIf="breakL.get('BreakT').hasError('required')">
This field is <strong>required</strong>
</mat-error>
</mat-form-field>
</div>
<div class="col-md-5">
<mat-form-field>
<input matInput placeholder="Break after Period" type="text" [formControl]="breakAP"
[errorStateMatcher]="matcher" autocomplete="off" maxlength="3">
<mat-error *ngIf="breakL.get('breakAP').hasError('required')">
This field is <strong>required</strong>
</mat-error>
</mat-form-field>
</div>
<div class="col-md-2">
<button mat-raised-button (click)="deletebreak(i)" type="button" color="warn">Delete</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<button mat-raised-button type="button" (click)="addbreak()"><i class="fa fa-plus"></i> Add rows</button>
</div>
<div class="col-md-6 text-right">
<button mat-raised-button (click)="submitForm()">Save form</button>
</div>
</div>
</form>
Вот файл Ts
form: FormGroup;
submitted = false;
constructor(private formBuilder: FormBuilder) {
}
periodT = new FormControl('', [Validators.required,
Validators.maxLength(3), Validators.pattern('[0-9]*$')]);
BreakT = new FormControl('', [Validators.required,
Validators.maxLength(3), Validators.pattern('[0-9]*$')]);
breakAP = new FormControl('', [Validators.required,
Validators.maxLength(3), Validators.pattern('[0-9]*$')]);
ngOnInit() {
this.form = this.formBuilder.group({
periodT: this.periodT,
breakList: this.formBuilder.array([
this.initbreak()
])
});
}
get breakForms() {
return this.form.get('breakList') as FormArray;
}
initbreak() {
return this.formBuilder.group({
BreakT: this.BreakT,
breakAP: this.breakAP,
});
}
addbreak() {
const control = <FormArray>this.form.controls['breakList'];
const breakL = this.formBuilder.group({
BreakT: this.BreakT,
breakAP: this.breakAP
});
control.push(breakL);
}
deletebreak(i) {
this.breakForms.removeAt(i);
}
async submitForm() {
this.submitted = true;
if (this.form.invalid) {
return;
}
}