page navigationend angular2 angular

navigationend - title angular 6



Angular 2: Iterar sobre controles de forma reactiva (7)

Me gustaría markAsDirty todos los controles dentro de un FormGroup .


Creo esta función para hacerlo * Tengo un control con el nombre ''orden'' y le paso el índice.

{"conditionGroups": [ { "order": null, "conditions": [] } ] } updateFormData() { const control = <FormArray>this.form.controls[''conditionGroups'']; control.value.map((x,index)=>{ x.order = index; })


La respuesta aceptada es correcta para una estructura de forma plana, pero no responde completamente la pregunta original. Una página web puede requerir FormGroups y FormArrays anidados, y debemos tener esto en cuenta para crear una solución sólida.

public markControlsDirty(group: FormGroup | FormArray): void { Object.keys(group.controls).forEach((key: string) => { const abstractControl = group.controls[key]; if (abstractControl instanceof FormGroup || abstractControl instanceof FormArray) { this.markControlsDirty(abstractControl); } else { abstractControl.markAsDirty(); } }); }


Para lo que vale, hay otra forma de hacer esto sin tener que usar Object.keys (...) magic:

for (const field in this.form.controls) { // ''field'' is a string const control = this.form.get(field); // ''control'' is a FormControl }


Parece que la función get ya no funciona para recuperar valores específicos en su formulario en Angular 8. Así es como lo resolví y dado que las respuestas son un poco antiguas, creo que esto podría ayudar a más usuarios. Basado en la respuesta de @Liviu Ilea

for (const field in this.myForm.controls) { // ''field'' is a string console.log(this.myForm.controls[field].value); }


Usando la respuesta @Marcos, creé una función que se puede llamar pasar un formGroup como parámetro y marca todos los controles secundarios de formGroup como sucios, solo para que se puedan usar desde más lugares alrededor del código, por ejemplo.

public touchAllFormFields(formGroup: FormGroup): void { Object.keys(formGroup.controls).forEach((key) => { formGroup.get(key).markAsDirty(); }); }

Espero eso ayude ;)


Object.keys( this.registerForm.controls).forEach(key => { this.registerForm.controls[key].markAsDirty(); });


Object.keys que Object.keys puede manejar esto ...

Object.keys(this.form.controls).forEach(key => { this.form.get(key).markAsDirty(); });

Para Angular 8+, use lo siguiente (según la respuesta de Michelangelo):

Object.keys(this.form.controls).forEach(key => { this.form.controls[key].markAsDirty(); });