我会先说这是我对AngularJS的新手,所以请原谅我,如果我的心态远远不够。我正在使用AngularJS编写一个非常简单的单页报告应用程序,肉和土豆当然使用角度模板系统自己生成报告。我有许多报告,我正在从类似Jinja的语法转换,我很难复制任何类型的计数器或运行制表功能。
实施例
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
在我的控制器中,我定义了一个像$scope.total = 0;
这样的变量,然后我可以在模板内部访问而没有问题。我无法弄清楚的是如何从total
元素中增加ng-repeat
。我想这会看起来像 -
<ul>
<li ng-repeat="foo in bar">
{{ foo.baz }} - {{ total = total + foo.baz }}
</li>
</ul>
<div> {{ total }} </div>
这显然不起作用,也不像{{ total + foo.baz}}
那样,提前感谢任何建议。
答案 0 :(得分:33)
如果您想要的只是计数器(根据您的第一个代码示例),请查看包含ngRepeat中当前(基于0)索引的$ index。然后只显示总数的数组长度。
<ul>
<li ng-repeat="item in items">
Item number: {{$index + 1}}
</li>
</ul>
<div>{{items.length}} Items</div>
如果您想在重复的商品中使用特定字段的总数,比如价格,您可以使用过滤器执行此操作,如下所示。
<ul>
<li ng-repeat="item in items">
Price: {{item.price}}
</li>
</ul>
<div>Total Price: {{items | totalPrice}}</div>
过滤功能:
app.filter("totalPrice", function() {
return function(items) {
var total = 0, i = 0;
for (i = 0; i < items.length; i++) total += items[i].price;
return total;
}
});
或者,对于改进的可重用性,通用总计过滤器功能:
app.filter("total", function() {
return function(items, field) {
var total = 0, i = 0;
for (i = 0; i < items.length; i++) total += items[i][field];
return total;
}
});
将使用如下:
<div>Total price: {{items | total:'price'}}</div>
答案 1 :(得分:5)
我需要总计而不是平均总数,所以我添加了@TimStewart留下的内容。代码如下:
app.filter("runningTotal", function () {
return function(items, field, index) {
var total = 0, i = 0;
for (i = 0; i < index+1; i++) {
total += items[i][field];
}
return total;
};
});
要在列中使用它,您只需:
<div>Total price: {{items | runningTotal:'price':$index}}</div>
答案 2 :(得分:0)
我不确定我是否完全理解这个问题,但只是需要显示您正在迭代的对象中的总数?只需将$scope.total
设置为数组的长度(上例中为bar
)。所以,$scope.total = $scope.bar.length;
如果您想要所有foo.baz
属性的总和,您只需要在控制器中计算它。
$scope.total = 0;
angular.forEach($scope.bar, function(foo) {
$scope.total += foo.baz;
});