Вы не дадите Angular передохнуть. Вы изменяете maxValue и сразу делаете обновление. Используйте SetTimeout, чтобы сделать новый фильм
updateValidity() {
setTimeout(()=>{
this.parentForm.controls.address.controls["zip"].updateValueAndValidity();
})
}
Кроме того, вам нужно вызвать функцию updateValidity при изменении значения;
setTo899 () {
this.maxZipValue = 899;
this.updateValidity()
}
И
<input type="number" name="maxZipValue"
[ngModel]="maxZipValue"
(ngModelChange)="maxZipValue=$event;updateValidity()">
см. ваш разветвленный стек
ПРИМЕЧАНИЕ: я не уверен, но использование ReactiveForms может работать лучше, и возможно удалить этот обходной путь