Я пытаюсь динамически создать FormArray в angular6 в сочетании с bootstrap.
My HTML:
<form [formGroup]="form" (ngSubmit)="submit()">
<mat-dialog-content>
<div id="arrayDisplay">
<button mat-button id="dialog-addEntry-button" class="btn blue" type="button" (click)="addItem()">
Add new entry
</button>
<div formArrayName="fooBar" *ngFor="let item of form.controls.fooBar?.value; let i = index;">
<div [formGroupName]="i">
<input formControlName="foo" required placeholder="foo">
<input formControlName="bar" required placeholder="bar">
</div>
</div>
</div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button id="dialog-submit-button" class="btn blue" type="submit"
[disabled]="form.invalid || form.pending || form.pristine">
Accept
</button>
<button mat-button id="dialog-cancel-button" class="btn grey-salsa btn-outline" type="button" mat-dialog-close>
Cancel
</button>
</mat-dialog-actions>
</form>
Мой Typescript выглядит следующим образом:
import { Observable, throwError } from 'rxjs';
import { Component, OnInit, Inject } from '@angular/core';
import { FormBuilder, Validators, FormGroup, FormArray} from '@angular/forms';
import { catchError } from 'rxjs/operators';
import { HttpEvent, HttpEventType } from '@angular/common/http';
export class ShzizzleNizzle implements OnInit{
public form: FormGroup;
constructor(private fb: FormBuilder)
{
}
createItem(): FormGroup {
return this.fb.group({
foo: 'test',
bar: ''
});
}
addItem(): void {
const myShizzle = this.form.controls.fooBar as FormArray
myShizzle.push(this.createItem());
}
submit(): void {
alert(JSON.stringify(this.form.controls.transactionData.value));
}
ngOnInit() {
this.form = this.fb.group({
fooBar: this.fb.array([])});
}
}
Когда я выполняю этот код, я могу добавлять записи в массив, но не могу вводить значения в поля foo и bar. Что я делаю не так? Или проблема в другом? Как, например, сборка webpack.
Я использовал эти ссылки в качестве руководства для создания этой формы: tektutorials stackblitz netbasal
РЕДАКТИРОВАТЬ: если я переименую formArrayName, я могу вводить значения, но они не требуют проверки