Angular 2 Reactive Forms trigger validation on submit
This can be achieved with the sample presented here, where you can make use of NgForm
directive:
<form [formGroup]="heroForm" #formDir="ngForm">
and then in your validation messages just check if the form is submitted:
<small *ngIf="heroForm.hasError('required', 'formCtrlName') && formDir.submitted">
Required!
</small>
EDIT: Now is also { updateOn: 'submit'}
is provided, but that works only if you do not have required
on the form, as required
is displayed initially anyway. You can suppress that with checking if field has been touched though.
// fb is 'FormBuilder'
this.heroForm = this.fb.group({
// ...
}, { updateOn: 'submit'})
Coming back after some months, I share here the improved version based on all the comments, just for the record:
markAsTouched(group: FormGroup | FormArray) {
group.markAsTouched({ onlySelf: true });
Object.keys(group.controls).map((field) => {
const control = group.get(field);
if (control instanceof FormControl) {
control.markAsTouched({ onlySelf: true });
} else if (control instanceof FormGroup) {
this.markAsTouched(control);
}
});
}
Hope it will be useful!
UPDATE: Angular 8 introduced FormGroup.markAllAsTouched()
and it does this! :D