Então, eu tenho um ng-repeat aninhado dentro de outro ng-repeat para criar um menu de navegação. Em cada um <li>
no loop ng-repeat interno, defino um ng-click que chama o controlador relevante para esse item de menu, passando o índice $ para que o aplicativo saiba qual deles precisamos. No entanto, eu também preciso passar o índice $ do ng-repeat externo para que o aplicativo saiba em qual seção estamos e qual tutorial.
<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>
aqui está um Plunker http://plnkr.co/edit/bJUhI9oGEQIql9tahIJN?p=preview
ng-click="loadFromMenu(section)"
. Passar $ index significa que você fará um loop para encontrar o objeto desnecessário.Respostas:
Cada ng-repeat cria um escopo filho com os dados passados e também adiciona uma
$index
variável adicional nesse escopo.Portanto, o que você precisa fazer é alcançar o escopo pai e usá-lo
$index
.Consulte http://plnkr.co/edit/FvVhirpoOF8TYnIVygE6?p=preview
fonte
ng-click="loadFromMenu($parent.$index, $index)"
loadFromMenu($parent.$parent.$index,$index)
e em alguns você precisarloadFromMenu($parent.$index,$index)
, o usothis....
simplesmente não funcionaria.Solução muito mais elegante do que
$parent.$index
está usandong-init
:Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
fonte
ng-init
foi demonstrado emng-init
documentos sem menção única nosng-repeat
documentos, então eu escrevi aqui + alterei os documentos no Github. Ang-repeat
sintaxe atual tem uma maneira melhor de conseguir isso, o que é demonstrado pelo @Okazari. Está livre de algumas imperfeições mencionadas por você nos comentários.Que tal usar esta sintaxe (veja este plunker ). Acabei de descobrir isso e é incrível.
Exemplo:
Com esta sintaxe, você pode dar seu próprio nome
$index
e diferenciar os dois índices.fonte
Só para ajudar alguém que chega aqui ... Você não deve usar $ parent. $ Index, pois não é realmente seguro. Se você adicionar um ng-if dentro do loop, você terá o $ index bagunçado!
Caminho certo
Confira: plnkr.co/52oIhLfeXXI9ZAynTuAJ
fonte
Ao lidar com objetos, você deseja ignorar os IDs simples, tanto quanto for conveniente.
Se você alterar a linha do clique para isso, acho que você estará bem no seu caminho:
Além disso, acho que você pode precisar mudar
para algo como
Veja http://docs.angularjs.org/misc/faq e procure por ng-class.
fonte
Apenas use
ng-repeat="(sectionIndex, section) in sections"
e isso será útil no próximo nível ng-repeat down.
fonte