После некоторого тестирования я в конечном итоге обнаружил, что updateValueAndValidity, как я предполагал, не обновляет все элементы управления в форме и что путем перебора всех элементов управления и обновления каждого из них в отдельности мы можем достичь желаемого результата:
recursivelyUpdateAndValidate(control) {
if (control.controls) {
Object.keys(control.controls).forEach(key => {
this.recursivelyUpdateAndValidate(control.get(key));
});
}
control.updateValueAndValidity();
}
saveButtonClick() {
this.recursivelyUpdateAndValidate(this.formGroup);
console.log("form valid: " + this.formGroup.valid);
}
}
Я не знаю, является ли это лучшим способом решения проблемы или я собираюсь найти другую проблему с этим, но, похоже, она работает до сих пор.
Причина, по которой я использовал рекурсия здесь, потому что она потерпела неудачу, когда была вложенность в форме, например:
this.formGroup = this.formBuilder.group({
dropdown: [null, Validators.required],
textbox: [null, textboxValidator],
nested: this.formBuilder.group({
anotherTextBox: [null, textboxValidator],
})
});
Я оставлю этот вопрос открытым, если найдутся лучшие ответы.