условный счетчик с нг-повтором - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу применить нечетные и четные классы к «родительским» строкам.Я хочу знать, есть ли способ увеличить счетчик, только если это родитель.Есть ли способ сделать это встроенным?То, как я его настроил, похоже, не увеличивает счетчик.

...
<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 голосов
/ 24 сентября 2018

ОБНОВЛЕНИЕ :

Как указал Даниил, я неправильно понял проблему.Объект 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 принимает только зарегистрированные директивы или привязки, а не случайные атрибуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...