如何在angularJs中对ng-repeat列表中的下一行进行算术计算并保留结果?
问题描述:
我有一个表,我想在每一行中进行加/减,并保留下一行的结果。如何在angularJs中对ng-repeat列表中的下一行进行算术计算并保留结果?
<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
};
});
答
时,从数据库或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 calcuaiton的或内循环:)
+0
我倾向于保持这些逻辑的服务,保持控制器尽可能薄,但它看起来像确定:) – Sean
你可以创建plunker? – Shohel
这个过滤器对于这个目的没有任何意义。过滤器旨在用于返回数组的子集,或以特定格式呈现数据值。它们不打算用于执行功能应用程序逻辑。 – Claies
好的,那么解决方案是什么:( – gsk