gpt4 book ai didi

javascript - 当 typeof === number 时, Angular 给出错误 "Model is not of type ` number`"

转载 作者:行者123 更新时间:2023-11-28 00:27:38 25 4
gpt4 key购买 nike

作为解决没有指令就无法过滤输入的问题,我尝试了以下操作:

输入ngChange检测更改并运行函数。输入有 type="number"

<input type="number"
ng-model="ctrl.met.mass"
ng-change="ctrl.met.update.mass()">

该函数更新一些其他字段,然后格式化它们。在此示例中,我希望它显示两个小数点 toFixed(2) 。这是通过变量=variable.toFixed(2)来完成的

ctrl.met.cost = ctrl.met.mass * ctrl.met.price;
ctrl.imp.mass = ctrl.met.mass * 0.0353;
ctrl.imp.cost = ctrl.imp.mass * ctrl.imp.price;

console.log(typeof ctrl.met.mass); // number

ctrl.met.mass = ctrl.met.mass.toFixed(2);
console.log(typeof ctrl.met.mass); //string

但是该数字的格式不如我收到的 this error ;请注意 URL 末尾的数字是 29.00,这是所需的结果。如果数字是 12.34,则它将代替 29.00。

Error: ngModel:numfmt
Model is not of type `number`

但是当我在任何时候运行 typeof ctrl.met.mass 或我正在使用的任何其他变量时,它告诉我它实际上是一个数字,除非 .toFixed() 与它交互之后。

Angular Number Filter 也出现同样的错误(注入(inject)后),parseInt() , parseFloat() ,和toPrecision() (精度为 4,以确保两位数的小数点后两位)。

ctrl.met.mass = $filter("number")(ctrl.met.mass, 2);
ctrl.met.mass = $filter("number")(parseInt/Float/Precision(ctrl.met.mass), 2);
ctrl.met.mass = ctrl.met.mass.toInt/Float
ctrl.met.mass = ctrl.met.mass.Precision(4);

我想我无法以这种方式执行此操作,并且需要使用指令。在我尝试之前,为什么会发生这种情况?可以解决吗?

编辑:看来我正在尝试的是不可能的。毫无疑问,将 ctrl.met.mass 设置为具有两位小数的数字后,它会优先拒绝它而不是整数。如果有人知道为什么会出现这种情况,请分享。

最佳答案

toFixed返回的值方法是一个字符串。因此,您需要将其转换为 Controller 中的 float :

var fixed = ctrl.met.mass.toFixed(2);
ctrl.met.mass = parseFloat(fixed);

关于javascript - 当 typeof === number 时, Angular 给出错误 "Model is not of type ` number`",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29336477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com