Saya mencoba untuk mengulangi formArray di komponen saya tetapi saya mendapatkan kesalahan berikut
Error: Cannot find control with unspecified name attribute
Berikut adalah tampilan logikanya pada file kelas saya
export class AreasFormComponent implements OnInit {
public initialState: any;
public areasForm: FormGroup;
constructor(private fb: FormBuilder) { }
private area(): any {
return this.fb.group({
name: ['', [Validators.required]],
latLong: ['', [Validators.required]],
details: ['', [Validators.required]]
});
}
public ngOnInit(): void {
this.areasForm = this.fb.group({
name: ['', [Validators.required]],
areas: this.fb.array([this.area()])
});
}
}
dan file template saya
<form class="areas-form" [formGroup]="areasForm" (ngSubmit)="onSubmit(areasForm.values)">
<md-input-container class="full-width">
<input mdInput placeholder="Location Name" type="text" formControlName="name" required>
<md-error *ngIf="areasForm.get('name').hasError('required')">Please enter the locationName</md-error>
</md-input-container>
<md-grid-list cols="1" [formArrayName]="areas">
<md-grid-tile formGroupName="i" colspan="1" rowHeight="62px" *ngFor="let area of areasForm.controls.areas.controls; let i = index ">
<md-grid-list cols="3" rowHeight="60px">
<md-grid-tile colspan="1">
<md-input-container class="full-width">
<input mdInput placeholder="Area Name" type="text" formControlName="name" required>
<md-error *ngIf="areasForm.get('areas').controls[i].name.hasError('required')">Please enter the area name</md-error>
</md-input-container>
</md-grid-tile>
<md-grid-tile colspan="1">
<md-input-container class="full-width">
<input mdInput placeholder="details" type="text" formControlName="details" required>
<md-error *ngIf="areasForm.get('areas').controls[i].name.hasError('required')">Please enter the locationName</md-error>
</md-input-container>
</md-grid-tile>
<md-grid-tile colspan="1">
<button md-fab (click)="remove(i)"><md-icon>subtract</md-icon>Remove Area</button>
</md-grid-tile>
</md-grid-list>
</md-grid-tile>
</md-grid-list>
<button type="submit" [disabled]="areasForm.invalid" md-raised-button color="primary">Submit</button>
</form>
loops
angular
angular2-forms
Bazinga777
sumber
sumber
[formGroup]="areasForm"
benar karenaareasForm
adalah variabel di TS komponen Anda, sedangkanareas
tidak. Ini adalah milikareasForm
:)Dalam kasus saya, saya memecahkan masalah dengan meletakkan nama formControl dalam tanda kutip ganda dan sinlge sehingga itu ditafsirkan sebagai string:
mirip dengan di bawah ini:
sumber
Masalah bagi saya adalah apa yang saya miliki
Dari pada
sumber
Dari pada
Anda harus menggunakan:
Tips :
Karena Anda melakukan perulangan pada kontrol, Anda sudah memiliki variabelnya
area
, sehingga Anda dapat mengganti ini:oleh:
sumber
Bagi saya, saya mencoba menambah
[formGroupName]="i"
dan / atauformControlName
dan lupa menentukan induknyaformArrayName
. Perhatikan pohon grup formulir Anda.sumber
formArrayName
pada DOM-elemen lebih tinggi dalam hirarki daripada[formGroupName]="i"
(misalnya pada elemen lingkaran:<div *ngFor=let ctrl of formArrayCtrl; let i = index"><div [formGroupName]="i"></div></div>
)Ini terjadi pada saya karena saya memiliki
fromArrayName
bukan diformArrayName
suatu tempat 😑sumber
Ini terjadi pada saya karena saya membiarkan formControlName kosong (
formControlName=""
). Karena saya tidak membutuhkan kontrol formulir ekstra itu, saya menghapusnya dan kesalahan telah teratasi.sumber
Jadi, saya punya kode ini:
Di sini saya menggunakan formControl mandiri, dan saya mendapatkan kesalahan yang kita bicarakan, yang tidak masuk akal bagi saya, karena saya tidak bekerja dengan formgroups atau formarrays ... itu hanya menghilang ketika saya menambahkan * ngIf ke pilihan itu sendiri, jadi tidak digunakan sebelum itu benar-benar ada. Itulah yang memecahkan masalah dalam kasus saya.
sumber