货币comapre在angularjs中没有按预期工作

时间:2017-11-01 17:58:10

标签: angularjs

我在HTML中有这个angularjs条件

<td>    
    <div style="color:red" ng-if="s.paid_amount == 0">
        Open
    </div>
    <div style="color:#D5DC07" ng-if="s.paid_amount > 0 && s.paid_amount < s.bill_amount">
        Semi Closed
    </div>
    <div style="color:#02FC1B" ng-if="s.paid_amount == s.bill_amount">
        Closed
    </div>
<td>

这是来自查询的回复。

enter image description here

理想情况下,它应该为两个记录打印半封闭。但它不打印任何3个条件。

有没有不同的方法比较角度货币?

1 个答案:

答案 0 :(得分:1)

比较失败,因为原始数据是字符串而不是数字。您需要先将数据转换为数字。我通过运行以下内容检查了您的数据,它确实返回true。

Number(s.paid_amount) > 0 && Number(s.paid_amount) < Number(s.bill_amount)

现在,您可以通过两种方式将数据转换为数字。首选方法是在控制器内部。您可以在数据集上执行以下操作。

data = data.map(function (o) {
            o.paid_amount = Number(o.paid_amount);
            o.bill_amount = Number(o.bill_amount);
            return o;
        });

或者,另一种方法是从ng-repeat块内的控制器调用一个函数。

CONTROLLER:

[$scope/vm].toNumber = function (num) {
        return Number(num);
    }

<强> TEMPLATE

<td>    
<div style="color:red" ng-if="toNumber(s.paid_amount) == 0">
    Open
</div>
<div style="color:#D5DC07" ng-if="toNumber(s.paid_amount) > 0 && toNumber(s.paid_amount) < toNumber(s.bill_amount)">
    Semi Closed
</div>
<div style="color:#02FC1B" ng-if="toNumber(s.paid_amount == toNumber(s.bill_amount)">
    Closed
</div>

当然,可能有更好的方法来实现转换。但这是需要做的事情的要点。