I have Angular 6 app with form. Here is an examle
export class ExampleComponent implements OnInit {
form: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.form = new FormGroup({
first: new FormControl(),
last: new FormControl()
});
this.markControlsAsDirty(this.form);
}
markControlsAsDirty(form: FormGroup) {
this.form.get('first').markAsDirty();
this.form.get('last').markAsDirty();
}
}
I don't want to get a single control and mark every field. Can I mark all controls in form group as dirty?
UPDATE I've been added stackblitz example to show that two previous answers were wrong
If you have a complicated form structure, you can segregate the code to mark FormGroup
, FormArray
or FormControl
as dirty. See the example here : Mark Form as dirty
markDirty() {
this.markGroupDirty(this.form);
console.log('FORM:', this.form);
}
markGroupDirty(formGroup: FormGroup) {
Object.keys(formGroup.controls).forEach((key) => {
switch (formGroup.get(key).constructor.name) {
case 'FormGroup':
this.markGroupDirty(formGroup.get(key) as FormGroup);
break;
case 'FormArray':
this.markArrayDirty(formGroup.get(key) as FormArray);
break;
case 'FormControl':
this.markControlDirty(formGroup.get(key) as FormControl);
break;
}
});
}
markArrayDirty(formArray: FormArray) {
formArray.controls.forEach((control) => {
switch (control.constructor.name) {
case 'FormGroup':
this.markGroupDirty(control as FormGroup);
break;
case 'FormArray':
this.markArrayDirty(control as FormArray);
break;
case 'FormControl':
this.markControlDirty(control as FormControl);
break;
}
});
}
markControlDirty(formControl: FormControl) {
formControl.markAsDirty();
}