Saltar al contenido principal

abstract2Fg

Paquete: @tiendana/ngx-core/pipes

Convierte AbstractControl a FormGroup con type safety en templates.

Características​

✅ Type casting seguro de AbstractControl a FormGroup
✅ Facilita acceso a FormGroups anidados
✅ Evita errores de tipos en templates
✅ Mejora autocompletado en IDEs

API​

Sintaxis​

{{ control | abstract2Fg }}

Parámetros​

ParámetroTipoDescripciónRequerido
valueAbstractControl | null | undefinedControl a convertir✅

Retorno​

El control como UntypedFormGroup.

Uso​

Acceso a FormGroup Anidado​

// Componente
form = this.fb.group({
user: this.fb.group({
name: [''],
email: ['']
})
});

// Template
<div [formGroup]="form.controls.user | abstract2Fg">
<input formControlName="name" />
<input formControlName="email" />
</div>

Múltiples Niveles de Anidación​

// Componente
form = this.fb.group({
company: this.fb.group({
info: this.fb.group({
name: [''],
taxId: ['']
}),
address: this.fb.group({
street: [''],
city: ['']
})
})
});

// Template
<div [formGroup]="form.controls.company | abstract2Fg">
<div [formGroup]="form.controls.company.controls.info | abstract2Fg">
<input formControlName="name" />
<input formControlName="taxId" />
</div>

<div [formGroup]="form.controls.company.controls.address | abstract2Fg">
<input formControlName="street" />
<input formControlName="city" />
</div>
</div>

En FormArrays​

// Componente
form = this.fb.group({
contacts: this.fb.array([
this.fb.group({
name: [''],
phone: ['']
})
])
});

// Template
@for (contact of (form.controls.contacts | abstract2Fa).controls; track $index) {
<div [formGroup]="contact | abstract2Fg">
<input formControlName="name" />
<input formControlName="phone" />
</div>
}

Casos de Uso​

  • Formularios con secciones anidadas
  • Perfiles de usuario con múltiples grupos
  • Direcciones y datos de contacto
  • Configuraciones complejas

Alternativa sin Pipe​

Sin el pipe, necesitas hacer casting manual:

// Sin pipe (verboso)
<div [formGroup]="$any(form.controls.user)">
<input formControlName="name" />
</div>

// Con pipe (limpio)
<div [formGroup]="form.controls.user | abstract2Fg">
<input formControlName="name" />
</div>

Notas​

Type Safety

Este pipe usa UntypedFormGroup en lugar de FormGroup<T> para mantener compatibilidad con diferentes versiones de Angular.

Combinación con abstract2Fa

Para acceder a FormGroups dentro de FormArrays, combina ambos pipes:

@for (group of (form.controls.items | abstract2Fa).controls; track $index) {
<div [formGroup]="group | abstract2Fg">
<input formControlName="field" />
</div>
}
Alternativa TypeScript

En Angular 14+, considera usar FormGroup tipado en lugar de UntypedFormGroup para mejor type safety en el componente.