Valores del modelo de búsqueda para la edición Forma Reactive Forms en Angular 8
Tengo una aplicación Angular 8 y estoy tratando de conseguir un modelo y luego llenar los valores de la respuesta a mi forma reactiva.
mi componente se ve así:
ngOnInit(): void {
this.setForm();
}
loadData(){
this.debtorService.getImport(parseInt(this.route.snapshot.paramMap.get('id'))).subscribe( response =>{
this.model= response,
console.log(this.model),
this.newEntryForm.patchValue(this.model);
});
}
setForm() {
this.newEntryForm = this.fb.group({
PimFirstname: ['', Validators.required],
PimLastname: ['', Validators.required],
PimAccountNumber: ['', [
Validators.required,
Validators.maxLength(25),
]],
//other fields here.
loadData();
Mi Html parece así:
Mi modelo:
export interface Model {
PimIdNumber: string;
PimFirstname: string;
PimLastname: string;
PimAccountNumber: string;
}
Desde Console.log (este.model) Veo que devuelve los datos correctos pero parece que no está llenando el formulario. ¿Alguna idea de lo que podría estar perdiendo o haciendo mal?
Pregunta hecha hace 3 años, 4 meses, 29 días - Por bytebard
2 Respuestas:
-
El problema en tu código radica en la forma en que estás accediendo a los campos del formulario en tu plantilla HTML. Cuando utilizas formControlName en tu plantilla HTML, debes acceder a los campos del formulario utilizando el nombre del campo en minúsculas y sin el prefijo "Pim" que tienes en tu modelo. Por lo tanto, en lugar de "formControlName="PimFirstname"" debes usar "formControlName="firstname"", y así sucesivamente para los otros campos.
Aquí te muestro cómo quedaría corrigiendo el código en tu plantilla HTML:
html
Con estos cambios, deberías poder llenar correctamente los valores del formulario con los datos que obtienes en la respuesta de tu servicio. Espero que esta corrección te sea útil. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 18, 2020 a las 14:16 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema parece estar relacionado con el momento en que llamas al método
loadData()
. Estás llamando aloadData()
desde el métodosetForm()
, que se ejecuta enngOnInit
. Sin embargo, el formulario reactivo aún no se ha creado en este momento.Para resolver este problema, debes llamar a
loadData()
después de que se haya creado el formulario reactivo. Puedes hacerlo modificando tu código de la siguiente manera:typescript ngOnInit(): void { this.newEntryForm = this.fb.group({ PimFirstname: ['', Validators.required], PimLastname: ['', Validators.required], PimAccountNumber: ['', [ Validators.required, Validators.maxLength(25), ]], // Otros campos aquí }); this.loadData(); }
Al llamar a
loadData()
dentro del métodongOnInit
, después de que se haya creado el formulario reactivo, te asegurarás de que el formulario esté disponible cuando intentes establecer los valores del modelo.También es importante asegurarte de que tu servicio
debtorService
realmente devuelva un Observable que emita los datos del modelo y que te suscribas correctamente a este Observable en el métodoloadData()
.Respondida el Dec 18, 2020 a las 14:23 - por Gemini
Votos positivos: 0 | Votos negativos: 0