Итак, у меня есть ng-repeat, вложенный в другой ng-repeat, чтобы создать навигационное меню. Для каждого <li>
внутреннего цикла ng-repeat я устанавливаю ng-click, который вызывает соответствующий контроллер для этого пункта меню, передавая $ index, чтобы приложение узнало, какой из них нам нужен. Однако мне нужно также передать $ index из внешнего ng-repeat, чтобы приложение знало, в каком разделе мы находимся, а также в каком учебнике.
<ul ng-repeat="section in sections">
<li class="section_title {{section.active}}" >
{{section.name}}
</li>
<ul>
<li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu($index)" ng-repeat="tutorial in section.tutorials">
{{tutorial.name}}
</li>
</ul>
</ul>
вот плункер http://plnkr.co/edit/bJUhI9oGEQIql9tahIJN?p=preview
ng-click="loadFromMenu(section)"
. Передача $ index означает, что вы выполните цикл, чтобы найти ненужный объект.Ответы:
Каждый ng-repeat создает дочернюю область с переданными данными, а также добавляет дополнительную
$index
переменную в эту область.Итак, вам нужно достичь родительской области и использовать ее
$index
.См. Http://plnkr.co/edit/FvVhirpoOF8TYnIVygE6?p=preview
источник
ng-click="loadFromMenu($parent.$index, $index)"
loadFromMenu($parent.$parent.$index,$index)
а в некоторых вам просто нужно,loadFromMenu($parent.$index,$index)
то использование неthis....
будет работать.Это более элегантное решение, чем
$parent.$index
использованиеng-init
:Плункер: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
источник
ng-init
было продемонстрировано вng-init
документах без единого упоминания вng-repeat
документах, поэтому я написал здесь + исправил документы на Github. Текущийng-repeat
синтаксис имеет лучший способ добиться этого, что демонстрирует @Okazari. Он свободен от некоторых недостатков, упомянутых вами в комментариях.Как насчет использования этого синтаксиса (взгляните на этот плункер ). Я только что обнаружил это, и это довольно здорово.
Пример:
С помощью этого синтаксиса вы можете дать собственное имя
$index
и дифференцировать два индекса.источник
Просто чтобы помочь кому-то, кто попал сюда ... Вы не должны использовать индекс $ parent. $, Поскольку это не совсем безопасно. Если вы добавите ng-if внутри цикла, вы получите беспорядочный индекс $ index!
Правильно
Проверить: plnkr.co/52oIhLfeXXI9ZAynTuAJ
источник
Когда вы имеете дело с объектами, вы хотите игнорировать простые идентификаторы настолько, насколько это удобно.
Если вы измените строку клика на это, я думаю, что вы будете хорошо на вашем пути:
Кроме того, я думаю, что вам может понадобиться изменить
что-то вроде
Смотрите http://docs.angularjs.org/misc/faq и ищите ng-класс.
источник
Просто использовать
ng-repeat="(sectionIndex, section) in sections"
и это будет полезно на следующем уровне ng-repeat down.
источник