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();
});