Ich versuche, ein formArray in meiner Komponente zu durchlaufen, erhalte jedoch den folgenden Fehler
Error: Cannot find control with unspecified name attribute
So sieht die Logik in meiner Klassendatei aus
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()])
});
}
}
und meine Vorlagendatei
<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
quelle
quelle
[formGroup]="areasForm"
ist korrekt, daareasForm
es sich um eine Variable in Ihrer Komponente TS handelt, während diesareas
nicht der Fall ist. Es ist Eigentum derareasForm
:)In meinem Fall habe ich das Problem gelöst, indem ich den Namen des formControl in doppelte und einzelne Anführungszeichen gesetzt habe, damit es als Zeichenfolge interpretiert wird:
ähnlich wie unten:
quelle
Das Problem für mich war, dass ich hatte
Anstatt
quelle
Anstatt
Sie müssen verwenden:
Tipps :
Da Sie die Steuerelemente durchlaufen, haben Sie bereits die Variable
area
, sodass Sie diese ersetzen können:durch:
quelle
Das passierte für mich, weil ich
fromArrayName
stattformArrayName
irgendwo hatte 😑quelle
Für mich habe ich versucht , hinzuzufügen
[formGroupName]="i"
und / oderformControlName
und zu vergessen die Eltern zu spezifizierenformArrayName
. Achten Sie auf Ihren Formulargruppenbaum.quelle
formArrayName
auf einem DOM-Elemente nach oben in der Hierarchie höher als[formGroupName]="i"
(zB auf dem Schleifenelement:<div *ngFor=let ctrl of formArrayCtrl; let i = index"><div [formGroupName]="i"></div></div>
)Dies ist mir passiert, weil ich einen formControlName leer gelassen habe (
formControlName=""
). Da ich dieses zusätzliche Formularsteuerelement nicht benötigte, habe ich es gelöscht und der Fehler wurde behoben.quelle
Also hatte ich diesen Code:
Hier habe ich eigenständiges formControl verwendet und den Fehler erhalten, über den wir sprechen, der für mich keinen Sinn ergab, da ich nicht mit Formulargruppen oder Formarrays gearbeitet habe. Er verschwand nur, als ich der Auswahl das * ngIf hinzufügte es selbst, wird also nicht verwendet, bevor es tatsächlich existiert. Das hat das Problem in meinem Fall gelöst.
quelle