AngularJS - отслеживать внутренний индекс $ через несколько циклов ng-repeat - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь перечислить вложенную структуру данных, сохраняя внутренний $index в качестве рабочего индекса.

Чтобы проиллюстрировать, это то, чего я хочу достичь:

Category Name 1
    1. Foo
    2. Bar
    3. Fez

Category Name 2
    4. Qux
    5. Baz

И вот результат, который я получаю сейчас:

Category Name 1
    1. Foo
    2. Bar
    3. Fez

Category Name 2
    1. Qux
    2. Baz

Как видите, я бы хотел, чтобы индекс переносился между родительскими циклами. Простую проблему, которую необходимо решить в обычном программировании, но это оказывается довольно трудно сделать в самих циклах angularjs.

Вот версия в развернутом виде того, что в данный момент выполняется, пользовательское свойство number вli элемент, являющийся хитрым битом.

<div ng-repeat="(category, items) in groups">
    <h2 class="category-name">{@ category @}</h2>
    <ul class="items-list">
        <li id="{@ item.id @}" my-widget ng-repeat="item in items" number="$index">
        </li>
    </ul>
</div>

Данные структурированы так (выкинутый код потребляет объекты):

{
  'Category Name 1': [{id:1},{id:2}],
  'Category Name 2': [{id:3},{id:4}]
}

Обратите внимание, что нет гарантиичто идентификаторы будут / должны быть последовательными.

Я пытался использовать переменную области и пытался увеличить ее в цикле, но она всегда отображается как последнее число:

// Controller.js
$scope.count = 0

// view.html
<li ... number="count + 1"></li> <!-- or count++ or any obvious variation -->

Или даже что-то такое уродливое, как:

... </li>
<p hidden>{@ increment() @}</p>

// Controller.js
$scope.increment = function(){$scope.count++;};

Кроме того, это просто заставляет AngularJS взрываться с сообщениями об ошибках, касающихся $apply.

Я также пытался использовать ng-init в родительском цикле для хранения индекса цикла, но я не понимаю, как его правильно использовать. Извиняюсь за то, что больше не показываю работу, но у меня проблемы с получением чего-либо кроме того, где я нахожусь ..

Что я могу сделать, чтобы перенести цикл?

Любая помощь будет в значительной степениоценили!

1 Ответ

1 голос
/ 14 октября 2019

Добавить свойство глобального индекса к элементу и рассчитать его. Или, если вы не хотите менять объект предмета, создайте его как карту:

$scope.myIndexMap = {};
globalIndex = 0;
forEach..., forEach...
  globalIndex++;
  $scope.myIndexMap[item.id] = globalIndex;

PS Многие люди пытаются делать странные и сложные вещи в HTML - лучше этого не делать. Вид должен быть максимально простым.

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