AngularJS记录嵌套ng-repeat的计数

时间:2017-08-17 14:19:04

标签: javascript jquery angularjs arrays json

我是角度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”。

1 个答案:

答案 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