我想将奇数和偶数类应用于“父”行。我想知道是否有一种方法可以仅在是父母的情况下增加计数器。
有没有一种方法可以内联?我设置它的方式似乎并没有增加计数器。
...
<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无法识别您添加到
parentCount
的td
属性。 Angular仅接受注册的指令或绑定,不接受随机属性。