I am using FormBuilder to build a form :
this.myForm = this.fb.group({
'name': new FormControl(null, Validators.min(5)),
'description': new FormControl(null, Validators.min(60))
});
The problem is I should also validate if it is required and I get it from configuration through a map built like this:
map = new Map<string, boolean>();
map.set('name', true);
map.set('description', false);
The problem can be solved as follows:
this.myForm = this.fb.group({
'name': this.map.get('name') ? new FormControl(null, Validators.compose([Validators.required, Validators.min(5)])) : new FormControl(null, Validators.min(5)),
'description': this.map.get('description') ? new FormControl(null, Validators.compose([Validators.required, Validators.min(60)])) : new FormControl(null, Validators.min(60))
});
That works but imagine in a large application with several forms with lots of fields really is uncomfortable this way of doing it. Ideally it would look something like this:
Object.keys(this.myForm.controls).forEach(key => {
if (map.get(key)) {
this.myForm.get(key).setValidators(this.myForm.get(key).getValidators().push(Validators.required))
}
});
Of course that way does not work. So if someone who has already solved this or has a good way to do what is described above I will thank you very much. Thanks in advance!!!
Update: The problem can be reduced to "how to get all validators associated with a FormControl". I do not think there is a definitive solution to this question --> https://github.com/angular/angular/issues/13461