javascript - 角度输入范围滑块四舍五入十进制数据绑定值
问题描述
我在 Angular 中创建了一个范围滑块,用于记录值和显示记录的值。
<input [formControlName]="object.id" [id]="object.id" type="range" [(ngModel)]="object.answer" [step]="object.step" [min]="object.minValue" [max]="object.maxValue">
object
包含来自数据库的 id、answer、step、min、max 的键值对。
对于以下对象,
{ id: 1, answer: 4, step: 0.25, minValue: 3, maxValue: 4 }
滑块显示正确的值,即 4。
但是,使用answer: 3.25
andanswer: 3.75
时,它分别显示 3 和 4。滑块似乎正在将十进制值四舍五入answer
到最接近的整数。
我在MDN中查找了输入范围,在 step 部分下,有一条注释说:
当用户输入的数据不符合步进配置时,用户代理可能会四舍五入到最接近的有效值,当有两个相等接近的选项时,首选正方向的数字。
但是,3.25 或 3.75 不是有效值吗?两者都可以写成(min + multiple of step) <= max
给定的 min: 3, max: 4 and step: 0.25
我还查看了如何在此处禁用用户代理验证,并在表单标签中使用novalidate
了属性,滑块仍然无法正确显示十进制值。但是,对于指定范围内的整数值,它会正确显示。
编辑 1:我尝试检查不同类型的“步骤”值。它正确显示整数步长(1、2、3)、小数 > 1 步长(1.1、1.5、2.5)。十进制 < 1 步(0.5、0.3)似乎无法正确显示。
编辑2:另外,如果我使用step="0.25"
而不是[step]="object.step"
,它会正确显示。因此,静态步骤正在工作,但属性绑定的步骤值无法正常工作,对于步骤值 < 1 也是如此。
解决方案
现场示例
我尝试通过少量调整来复制您的场景,它似乎工作正常。请看看它是否对您有帮助。随意根据您的要求调整 obj 的模型值。
模板:
<hello name="{{ name }}"></hello>
<p>
Start editing to see some magic happen :)
<br>Please see the console :)
</p>
<input
[id]="obj.id" type="range"
[step]="obj.step" [min]="obj.minValue" [max]="obj.maxValue" [(ngModel)]="obj.answer"
(ngModelChange)="valueChanged($event)"
>
零件:
import { Component, VERSION, OnChanges } from "@angular/core";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
name = "Angular " + VERSION.major;
obj = {
id: 1,
answer: 0,
step: 0.25,
minValue: 0,
maxValue: 47.8
};
constructor() {}
valueChanged(event:any){
console.log(event);
console.log(this.obj);
}
}
推荐阅读
- docker - 如何在后台捕获通过`docker-compose exec -d`运行的命令的日志?
- ios - 在 tableView 数据值 Swift 顶部添加或附加行的部分
- rows - 谷歌云Bigtable读取多行
- mysql - 如何获取同一表中另一列的值作为参考
- arrays - 循环复制粘贴,不同范围下
- c++ - 堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出
- kubernetes - 如何在 Kubernetes 中使用光纤通道 (FC) 声明 StorageClass
- kubernetes - Helm 失败的测试作业不断重启
- java - 我从 Hibernate 中没有例外,但表中没有数据插入
- c - 没有“return”命令的返回