【发布时间】:2020-03-05 16:16:45
【问题描述】:
在反应式表单方法中,我有一个绑定了表单控件的滑块。当滑块移动时,表单控件值会更新。 我在滑块附近还有一个输入字段,它显示滑块的值,也可以通过键入来更新它。
<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"。有没有办法来解决这个问题?
编辑: Stackblitz 网址:https://stackblitz.com/edit/angular-yb2vgj
请假设第一个输入是一个滑块,其输入类型为
new FormControl({value: 24}), and not new FormControl(24)
使用那里存在的代码和上面发布的场景,我想了解为什么第二个输入在超过 100 的 2 个连续输入后没有正确更新。
【问题讨论】:
-
使用 ngModel 进行双向绑定
-
@SanjayLohar 或者更好的是,使用响应式表单的方式——使用
formControlName -
@KurtHamilton 是的,这是一个更好的选择。
-
嗯,我这样编码是有原因的。滑块(有一个
formControlName)有一个value: {value: 1}类型的值,而输入有一个value: 1类型的值。让输入与我想出的滑块具有相同的值。 -
您能为此创建一个 stackblitz 实例吗?
标签: javascript angular angular-reactive-forms