ng-repeat的条件计数器

时间:2018-09-24 16:35:26

标签: javascript angularjs

我想将奇数和偶数类应用于“父”行。我想知道是否有一种方法可以仅在是父母的情况下增加计数器。 有没有一种方法可以内联?我设置它的方式似乎并没有增加计数器。

...
<tbody ng-init="parentCount=0">
  <tr ng-repeat="value in finalArr"
      ng-class={'parentRow': value.isParent, 'childRow': !value.isParent}
      parentCount="{value.isParent ? parentCount = parentCount + 1}"
      ...
  >
    <td>
      id: {{ value.isParent ? parentCount : '' }}
    </td>
    ...
 </tr>
    ...
</tbody>
...

1 个答案:

答案 0 :(得分:3)

更新

正如丹尼尔指出的那样,我误解了这个问题。 value对象可以是父对象或子对象,并且您仅想在计数器为父对象时递增计数器。这是我可以想到的解决方案:

var app = angular.module("app", []);

app.controller('ctrl', ['$scope', function($scope) {
  $scope.counter = {
    parentCount: 0
  }
  
  $scope.incrementParent = function (item) {
    if (item.isParent) {
      $scope.counter.parentCount++
    }
    return $scope.counter.parentCount
  }
  
  $scope.items = [
    {name: 'a', isParent: true},
    {name: 'b', isParent: true},
    {name: 'c', isParent: false},
    {name: 'd', isParent: false},
    {name: 'e', isParent: true},
    {name: 'f', isParent: true},
  ]
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>

<div ng-app="app" ng-controller="ctrl">
  <div ng-repeat="item in items"  ng-init="count = incrementParent(item)">
    {{item.name}} - the parent count: {{item.isParent ? count : 'is a child'}}
  </div>
  
</div>

如果要内联处理,可以将incrementParent函数压缩为一行(尽管我认为它不太可读):

<div ng-repeat="item in items" ng-init="count = (item.isParent ? (counter.parentCount = counter.parentCount + 1) : counter.parentCount)">

注意:

我将parentCount放在对象上,因为ng-repeat将为每个项目创建一个新的作用域。如果您直接在模板中分配给parentCount,则将修改子范围而不是父范围。

我们为每个项目创建一个当前parentCount值的快照,并将其分配给count中的变量ng-init。如果您对每个项目直接使用counter.parentCount,则将无法使用,因为在循环结束后,它们将都是相同的值。

原始

ng-repeat范围内,有一个$index属性可以用作计数器(只是从0开始)。 AngularJS对其进行维护,因此您不必自己对其进行增量。最好只使用那个。

关于为什么计数器不增加, "{value.isParent ? parentCount = parentCount + 1}"似乎不是有效的JavaScript语法(对于三元运算符,您需要:部分)。我怀疑它会抛出并且AngularJs会捕获它而只是忽略它。 Angular无法识别您添加到parentCount的{​​{1}}属性。 Angular仅接受注册的指令或绑定,不接受随机属性。