Событие valueChanges
наступает после того, как новое значение обновляется до значения FormControl, поэтому вы не можете получить старое значение.
Наилучшим подходом будет использование валидатора, упомянутого @JB Nizet.
Если вы хотите продолжить работу с решением, вы можете использовать Angular ngDoCheck
крюк жизненного цикла, чтобы сохранить старое значение.
ИзмененоКод:
export class AppComponent implements DoCheck {
private oldValue;
control: FormControl = new FormControl(0);
constructor() {
this.control.valueChanges.pipe(distinctUntilChanged()).subscribe(newValue => {
if (newValue >= 10) {
// set previous value
console.log("old value = ", this.oldValue)
this.control.patchValue(this.oldValue);
}
})
}
ngDoCheck() {
this.oldValue = this.control.value
}
}
StackBlitz