如何进行算术计算并将结果保存在angularJs中的ng重复列表中的下一行

How can I do arithmetic calculation and preserve result for next row in ng-repeat list in angularJs?

本文关键字:列表 一行 ng 中的 计算 何进行 angularJs 存在 保存 结果      更新时间:2023-09-26

我有一个表,我想在每行中进行加法/减法运算,并为下一行保留结果。

<tr ng-repeat="statement in statements.result.data">
   <td>{{statement|getClosingBalance:statements.opening_balance|number:2}}</td>
</tr>

过滤器,

invoiceApp.filter('getClosingBalance', function () {
return function (statement, balance) {
    if (statement.type == 1) {
        return parseFloat(balance) + parseFloat(statement.amount);
    } else if (statement.type == 2) {
        return parseFloat(balance) - parseFloat(statement.amount);
    }
}
});

当我编写代码时,它运行良好,但我想在每次手术后保持平衡。

如何实现相同的功能?

为什么不计算服务中的数据,并保持视图的整洁。计算服务中的数据,然后直接呈现数据,这使您的视图干净,服务易于测试。

   app.factory('openingBalanceService', function() {
    function calculateOpeningBalance(data){
       var result = angular.copy(data);
       /*do calculation on result*/
       return result
    }
    return{
      calculateOpeningBalance: calculateOpeningBalance
    };
   });

当数据从db或api、接收时,我在控制器本身中进行所有计算

$scope.statements.balance = $scope.statements.opening_balance;
                    angular.forEach($scope.statements.result.data, function (obj) {
                        if (obj.type == 1) {
                            obj.closing_balance = parseFloat($scope.statements.balance) + parseFloat(obj.amount)
                        } else if (obj.type == 2) {
                            obj.closing_balance = parseFloat($scope.statements.balance) - parseFloat(obj.amount)
                        }
                        $scope.statements.balance = obj.closing_balance;
                    });

Html,

<td class="text-right" data-ng-bind="(company.currency)+' '+(statement.closing_balance|number:2)"></td>

因此,在html中或循环内部不会有任何类型的计算:)