Индекс доступа родительского ng-repeat из дочернего ng-repeat
Я хочу использовать индекс родительского списка (foos) в качестве аргумента для вызова функции в дочернем списке (foos.bars).
Я нашел сообщение, в котором кто-то рекомендует использовать $parent. $index, но $index
не является свойством $parent
.
Как получить доступ к индексу родительского ng-repeat
?
<div ng-repeat="f in foos">
<div>
<div ng-repeat="b in foos.bars">
<a ng-click="addSomething($parent.$index)">Add Something</a>
</div>
</div>
</div>
Ответы
Ответ 1
Мой примерный код был прав, и проблема была в моем фактическом коде. Тем не менее, я знаю, что было трудно найти примеры этого, поэтому я отвечаю на него, если кто-то еще смотрит.
<div ng-repeat="f in foos">
<div>
<div ng-repeat="b in foos.bars">
<a ng-click="addSomething($parent.$index)">Add Something</a>
</div>
</div>
</div>
Ответ 2
В соответствии с ng-repeat docs http://docs.angularjs.org/api/ng.directive:ngRepeat вы можете сохранить индекс ключа или массива в переменной по вашему выбору. (indexVar, valueVar) in values
чтобы вы могли написать
<div ng-repeat="(fIndex, f) in foos">
<div>
<div ng-repeat="b in foos.bars">
<a ng-click="addSomething(fIndex)">Add Something</a>
</div>
</div>
</div>
Один уровень вверх по-прежнему довольно чист с $parent. $index, но несколько родителей, все может стать беспорядочным.
Примечание: $index
будет по-прежнему определяться в каждой области, он не будет заменен на fIndex
.
Ответ 3
Взгляните на мой ответ на аналогичный вопрос.
По сглаживанию $index
нам не нужно писать сумасшедшие вещи, такие как $parent.$parent.$index
.
Еще более элегантное решение, в котором $parent.$index
использует ng-init:
<ul ng-repeat="section in sections" ng-init="sectionIndex = $index">
<li class="section_title {{section.active}}" >
{{section.name}}
</li>
<ul>
<li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu(sectionIndex)" ng-repeat="tutorial in section.tutorials">
{{tutorial.name}}
</li>
</ul>
</ul>
Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
Ответ 4
Вы также можете получить контроль над индексом grand parent по следующему коду
$parent.$parent.$index
Ответ 5
Вы можете просто использовать $parent. $index. где parent будет представлять объект родительского повторяющегося объекта.
Ответ 6
$parent не работает, если есть несколько родителей. вместо этого мы можем определить родительскую индексную переменную в init и использовать ее
<div data-ng-init="parentIndex = $index" ng-repeat="f in foos">
<div>
<div data-ng-init="childIndex = $index" ng-repeat="b in foos.bars">
<a ng-click="addSomething(parentIndex)">Add Something</a>
</div>
</div>
</div>