В подходе с реактивной формой у меня есть ползунок, с которым связан элемент управления формой. Когда ползунок перемещается, значение элемента управления формы обновляется. У меня также есть поле ввода рядом с ползунком, которое показывает значение ползунка, и я также могу обновить его, набрав.
<input type="number" class="form-control" id="{{feature.name}}-input"
[min]="0" [max]="100" [step]="1"
(change)="onInputChange($event, feature)" [value]="featuresForm.get(feature.name)?.value.value">
И у меня есть следующий метод onInputChange
, который обновляет значение элемента управления формы, когда пользователь изменяет ввод:
onInputChange(event: any, feature: any) {
const input = this.featuresForm.get(feature.name);
if (event.target.value > 100) {
input?.setValue({ value: 100 });
return;
}
if (event.target.value < 0) {
input?.setValue({ value: 0 });
return;
}
input?.setValue({ value: event.target.value });
}
Все работает нормально, если я ввожу значение в диапазоне от 0 до 100, но что-то странное происходит, если я ввожу значения вне этого диапазона.
Например:
- Вход 105 - значение входа сбрасывается на 100
- Вход 110 - значение входа остается равным 110 (или любому другому значению, которое вы вводите более 100), оно больше не сбрасывается
- Ввод 50 - значение ввода сбрасывается до 50, все работает как ожидалось
Я думаю, что при последовательном выполнении input?.setValue({ value: 100 });
, ввод 105 и затем 110, форма не обнаружит изменить, и поэтому он не будет обновлять [value]="featuresForm.get(feature.name)?.value.value"
. Есть ли способ это исправить?
Редактировать: URL-адрес Stackblitz: https://stackblitz.com/edit/angular-yb2vgj
Предположим, что первым входом будет ползунок, который имеет тип ввода
new FormControl({value: 24}), and not new FormControl(24)
С помощью кода, который присутствует там, и с сценарием, опубликованным выше, я хотел бы понять, почему второй вход не обновляется должным образом после 2 последовательных входов более 100.