算术加法(+)在ng-bind中不起作用

Arithmetic addition (+) is not working in ng-bind

本文关键字:ng-bind 不起作用      更新时间:2023-09-26

有一个对象

objData.pendingCount = '2',objData.refundCount = '1',objData.saleCount = 43;

执行
<td ng-bind="(objData.pendingCount / objData.saleCount * 100).toFixed(2)"></td>

这个工作正常,但是当我执行

<td ng-bind="(objData.pendingCount +objData.refundCount)/ objData.saleCount * 100).toFixed(2)"></td>

这里的+不是在执行算术运算,而是在进行连接。

我假设这些值来自某种类型的文本框(通过ng-model)。如果是这样,解决这个问题的最简单方法是在它们上设置一个type='number', angular会处理剩下的!

<input ng-model="objData.pendingCount" type="number" />
...

另一种方法是使用+前缀强制进行数字转换,如

<span ng-bind="((+objData.pendingCount + +objData.refundCount)/ objData.saleCount * 100).toFixed(2)"></span>

为什么不能在Angular表达式中使用Number(…)将字符串变成数字

使用Number将字符串转换为数字将不能直接工作,因为(从https://docs.angularjs.org/guide/expression)

Context: JavaScript表达式根据全局变量求值窗口。在Angular中,表达式是根据作用域对象计算的。

如果你需要使用Number你可以输入

$scope.Number = $window.Number;

,然后在表达式中使用它。其他全局窗口属性也是如此。

纠正你的表达式:

<td ng-bind="(objData.pendingCount +objData.refundCount)/ (objData.saleCount * 100).toFixed(2)"></td>

缺少一个开括号

我用

<td ng-bind="(sum(objData.pendingCount,objData.refundCount)/objData.saleCount*100).toFixed(2)"></td>

和控制器

$scope.sum = function (a, b) {
   return parseInt(a) + parseInt(b);
}