У меня есть компонент ввода для времени.Я хочу выполнить некоторые входные модификации, чтобы время не выходило за пределы.
Это выдержка из разметки HTML
<input
(change)="hoursChange($event.target.value)"
(keypress)="onlyNumHandler($event)"
(blur)="onBlur('hours')"
[ngModel]="hours"
[readonly]="readonly"
[disabled]="!dateVal"
placeholder="23"
type="text"
matInput
>
Здесь dateVal - это экземпляр Moment.
И этомоя функция изменять часы на входе
hoursChange(val: string): void {
const numVal = Number(val);
if (isNaN(numVal) || !isFinite(numVal)) {
this.hours = '00';
} else if (numVal > 23) {
this.hours = '23';
} else {
this.hours = val;
}
this.dateVal.set({
hour: Number(this.hours)
});
this.changeDate(this.dateVal);
}
Проблема в том, что я не могу заставить его работать на входе.Изменяет входное значение только при размытии.Если я изменяю (change)
на (input)
, он изменяет значение только один раз, когда достигает максимального предела.
Хитрость заключается в том, что функция все устанавливает успешно (то есть hours
опора на это должна быть и момент объектаустановлены правильные часы), однако показанное входное значение все еще не 23
, а 999
(в случае ввода 999
).
Я не знаю, имеет ли это значение, но я 've enabled ChangeDetectionStrategy.OnPush
.
Примерное поведение, которое я наблюдаю https://stackblitz.com/edit/angular-hjlded