Estoy tratando de iterar sobre un formArray en mi componente pero obtengo el siguiente error
Error: Cannot find control with unspecified name attribute
Así es como se ve la lógica en mi archivo de clase
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()])
});
}
}
y mi archivo de plantilla
<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
fuente
fuente
[formGroup]="areasForm"
es correcto porqueareasForm
es una variable en su componente TS, mientrasareas
que no lo es. Es propiedad deareasForm
:)En mi caso, resolví el problema poniendo el nombre del control de formulario entre comillas dobles y simples para que se interprete como una cadena:
similar al siguiente:
fuente
El problema para mí era que tenía
En vez de
fuente
En vez de
Debes usar:
Consejos :
Como está recorriendo los controles, ya tiene la variable
area
, por lo que puede reemplazar esto:por:
fuente
Para mí, yo estaba tratando de añadir
[formGroupName]="i"
y / oformControlName
y olvidar para especificar la matrizformArrayName
. Preste atención a su árbol de grupos de formularios.fuente
formArrayName
de un elemento DOM más arriba en la jerarquía de[formGroupName]="i"
(por ejemplo, en el elemento de bucle:<div *ngFor=let ctrl of formArrayCtrl; let i = index"><div [formGroupName]="i"></div></div>
)Esto me estaba sucediendo porque tenía en
fromArrayName
lugar de enformArrayName
algún lugar 😑fuente
Esto me sucedió porque dejé un formControlName vacío (
formControlName=""
). Como no necesitaba ese control de formulario adicional, lo eliminé y se resolvió el error.fuente
Entonces, tenía este código:
Aquí estaba usando formControl independiente, y estaba obteniendo el error del que estamos hablando, que no tenía sentido para mí, ya que no estaba trabajando con formgroups o formarrays ... solo desapareció cuando agregué * ngIf a la selección en sí mismo, por lo que no se utiliza antes de que realmente exista. Eso es lo que resolvió el problema en mi caso.
fuente