ОБНОВЛЕНИЕ :
Как указал Даниил, я неправильно понял проблему.Объект 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 поймает это и просто проигнорирует это. Атрибут parentCount
, который вы добавили в td
, не распознается Angular.Angular принимает только зарегистрированные директивы или привязки, а не случайные атрибуты.