我是角度js初学者,我有两个嵌套的ng-repeat与自定义过滤器,现在我试图得到显示的订单的记录数。它工作正常,但在应用产品过滤器后,它没有按预期工作。 例如:如果订单在过滤后没有要显示的产品,那么我不希望它与我显示的总记录数一起添加。
我的HTML代码:
<ul ng-repeat="order in Orders | filter:orderName as recordCount">
Order Id: <b>{{order.orderName}}</b>
<li ng-repeat="product in order.products | filter:productName as prodCount">
<b>Name</b> : {{product.name}}, <b>Price</b>: {{product.price}}
</li>
<li ng-if="prodCount < 1">No Product found</li>
<br/>
</ul>
为了更好地理解,我不希望显示为“ No Product found ”的订单数量,需要计算产品订单数量。 我不知道如何进行以达到我的期望。需要帮助提前感谢。
记录计数=(显示的订单数量 - 没有产品的订单数量)
找到我的小提琴“fiddle”。
答案 0 :(得分:0)
您可以关注更改,然后在每个产品上调用过滤器productName
来计算总计数,如下所示:
首先更改ng-repeat
以将已过滤列表的结果存储到变量中:
<ul ng-repeat="order in ($parent.filteredOrders = (Orders | filter:orderName))">
然后注意更改,循环浏览已过滤的列表并致电productName
以检查是否适用
$scope.$watch(function() {
$scope.totalCount = 0;
if ($scope.filteredOrders) {
$scope.filteredOrders.forEach(function(order) {
var l = order.products.length;
for (var i = 0; i < l; i++) {
if ($scope.productName(order.products[i])) {
$scope.totalCount++;
break;
}
}
});
}
});
然后显示总数:
{{totalCount}}
修改:fiddle