Saltar al contenido

Angular: el cambio de valor de formGroupName no actualiza el formulario

Solución:

Recomendaría me gusta en lugar de usar,

<input [formControl]="myForm.controls[fgn].controls['name']">

usar,

<form [formGroup]="myForm">
 <div [formGroup]="myForm.controls[fgn]">
  <input [formControlName]="'name'">
 </div>
</form>

La razón es que si tiene n campos de entrada, por ejemplo, más de 25 campos en un formulario, no es una buena práctica aplicar [formControl]="myForm.controls[fgn].controls['name']" tipo de declaración en cada campo, ya que esto llevará más tiempo y parece una pesadilla si desea modificar cualquier cambio simple.

En cambio, si usa [formGroup]="myForm.controls[fgn]", se ocupará del interior [formControlName] por sí mismo. Y esto funciona bien ya que lo estoy usando en mi proyecto.

Gracias a @Amit por iniciar esta idea en mí.

Espero que esto ayude. Feliz codificación optimizada 🙂

No estoy seguro de por qué no funcionó con el formControlName Acercarse.

Sin embargo, esto parece funcionar:

<input [formControl]="myForm.controls[fgn].controls['name']">

ACTUALIZAR:

Puede usar esta solución para AOT:

<input [formControl]="myForm.get(fgn + '.name')" />

(Esto se considera una solución alternativa ya que invoca la get método con demasiada frecuencia)

Lo estabas haciendo mal. El código correcto será:

<form [formGroup]="myForm">
    <div>
        <input [formControl]="myForm.controls['zero'].controls['name']">
        {{myForm.controls['zero'].controls['name'].value}}
    </div>
</form>

<button (click)="formChange()" >Change</button>

{{fgn}}
<br>
{{myForm.value | json}}

Explicación

formControlName espera el nombre del control de formulario pero lo estaba usando de manera incorrecta => [formControlName]. Cuando está pasando un objeto de control de formulario en lugar del nombre del control de formulario, entonces usa [formControl]. Espero que esto ayude

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *