嵌套 ng-repeat 的 AngularJS 记录计数
Posted
技术标签:
【中文标题】嵌套 ng-repeat 的 AngularJS 记录计数【英文标题】:AngularJS record count on nested ng-repeat 【发布时间】:2018-01-26 00:28:09 【问题描述】:我是 Angular 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>
为了更好地理解,我不希望显示为“未找到产品”的订单数,需要带有产品的订单数。 我不知道如何进行才能达到我的期望。需要帮助提前谢谢。
记录数 =(显示的订单数 - 没有产品的订单数)
找到我的小提琴“fiddle”。
【问题讨论】:
对不起,我不太了解您想要实现的目标。当研究没有结果时,您不想显示此Total records found : 3
?
不,我想显示有产品的订单数量
您能否提供一个您想要的示例?我还是不太明白,对不起,也许是我的错:(
你能打开我的小提琴吗?
是的,我做到了,我仍然打开它
【参考方案1】:
您可以观察变化,然后在每个产品上调用过滤器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
【讨论】:
以上是关于嵌套 ng-repeat 的 AngularJS 记录计数的主要内容,如果未能解决你的问题,请参考以下文章
json #AngularJS,#JavaScript:使用ng-repeat循环遍历嵌套数组
如何在angularjs中使用带有嵌套ng-repeat的复选框
Asp MVC angularjs 使用 viewmodel 在视图上嵌套 ng-repeat
如何在AngularJS中使用ng-repeat创建嵌套结构[关闭]
AngularJS在对话框取消时恢复嵌套在ng-repeat中的控制的选定值
angularjs基础ng-repeat嵌套循环报错angular.min.js:89 Error: [ngRepeat:dupes]