Tenho um problema simples, porém complexo. Tenho um formulário reativo e quero definir a validação programaticamente.
this.boatForm.get('boatType').setValidators(Validators.required);
this.boatForm.updateValueAndValidity();
this.boatForm.get('boatType').updateValueAndValidity();
this.#logger.debug(
'/n', 'value:', this.boatForm.get('boatType').value,
'/n', 'valid:', this.boatForm.get('boatType').valid
)
O valor do controle boatType é nulo. Portanto, espero que o log mostre:
valor: válido: falso
E... acontece mesmo.
Mas eu tenho vários controles naquele formulário, então, em vez de aplicar updateValueAndValidity() a cada controle individualmente, quero executar:
this.boatForm.get('boatType').setValidators(Validators.required);
// Set other validators on other controls on the same form
this.boatForm.updateValueAndValidity();
this.#logger.debug(
'\n', 'value', this.boatForm.get('boatType').value,
'\n', 'valid', this.boatForm.get('boatType').valid
)
Mas agora eu entendo:
valor: válido: verdadeiro
A solução alternativa que implementamos é chamar um método:
static updateFormControlValidators(form: FormGroup): void {
// Iterate over each control in the form group
Object.keys(form.controls).forEach(controlName => {
const control = form.get(controlName);
// Call updateValueAndValidity to re-evaluate the validity of each control
if (control) {
control.updateValueAndValidity();
}
});
}
Mas a questão é:
form.updateValueAndValidity() deve realizar a mesma coisa?