作为一种无法在没有指令的情况下过滤输入的工作,我尝试了以下方法:
在输入ngChange上检测到更改并运行一个函数。输入有type="number"
<input type="number"
ng-model="ctrl.met.mass"
ng-change="ctrl.met.update.mass()">
该函数更新其他一些字段,然后格式化它们。在这个例子中,我希望它用toFixed(2)显示两个小数点。这是通过variable = 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(注入后),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设置为毫无疑问的是具有两个小数位的数字时,它优先于整数拒绝它。如果有人知道为什么会这样,请分享。
答案 0 :(得分:1)
toFixed
方法返回的值是一个字符串。因此,您需要将其转换为控制器中的float:
var fixed = ctrl.met.mass.toFixed(2);
ctrl.met.mass = parseFloat(fixed);
答案 1 :(得分:0)
你可以创建一个stringToNumber指令来解析字符串到数字,这个完美的例子显示在下面的链接: https://docs.angularjs.org/error/ngModel/numfmt