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

...
<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>
...

最佳答案

更新:

正如丹尼尔指出的那样,我误解了这个问题。 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无法识别您添加到parentCounttd属性。 Angular仅接受注册的指令或绑定,不接受随机属性。

08-25 17:50