Entonces tengo un ng-repeat anidado dentro de otro ng-repeat para construir un menú de navegación. En cada uno <li>
del bucle interno ng-repeat, configuro un ng-click que llama al controlador correspondiente para ese elemento del menú pasando el $ index para que la aplicación sepa cuál necesitamos. Sin embargo, también necesito pasar el $ index desde el ng-repeat externo para que la aplicación sepa en qué sección estamos y en qué 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>
aquí hay un Plunker http://plnkr.co/edit/bJUhI9oGEQIql9tahIJN?p=preview
ng-click="loadFromMenu(section)"
. Pasar $ index significa que harás un ciclo para encontrar el objeto que no es necesario.Respuestas:
Cada ng-repeat crea un ámbito secundario con los datos pasados, y también agrega una
$index
variable adicional en ese ámbito.Entonces, lo que debe hacer es llegar al alcance principal y utilizarlo
$index
.Ver http://plnkr.co/edit/FvVhirpoOF8TYnIVygE6?p=preview
fuente
ng-click="loadFromMenu($parent.$index, $index)"
loadFromMenu($parent.$parent.$index,$index)
y en algunos necesita justoloadFromMenu($parent.$index,$index)
entonces, usarthis....
simplemente no funcionaría.Solución mucho más elegante que
$parent.$index
está usandong-init
:Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
fuente
ng-init
se demostró enng-init
documentos sin una sola mención enng-repeat
documentos, así que escribí aquí + modifiqué los documentos en Github. Lang-repeat
sintaxis actual tiene una mejor manera de lograr esto, lo cual es demostrado por @Okazari. Está libre de algunas imperfecciones mencionadas por usted en los comentarios.¿Qué pasa con el uso de esta sintaxis (eche un vistazo en este plunker ). Acabo de descubrir esto y es bastante impresionante.
Ejemplo:
Con esta sintaxis puede dar su propio nombre
$index
y diferenciar los dos índices.fuente
Solo para ayudar a alguien que llegue aquí ... No debes usar $ parent. $ Index ya que no es realmente seguro. Si agrega un ng-if dentro del bucle, ¡obtendrá el $ index desordenado!
Manera correcta
Verifique: plnkr.co/52oIhLfeXXI9ZAynTuAJ
fuente
Cuando se trata de objetos, desea ignorar las identificaciones simples tanto como sea conveniente.
Si cambia la línea de clic a esto, creo que estará bien encaminado:
Además, creo que es posible que deba cambiar
a algo como
Consulte http://docs.angularjs.org/misc/faq y busque ng-class.
fuente
Solo usa
ng-repeat="(sectionIndex, section) in sections"
y eso será utilizable en el siguiente nivel ng-repeat down.
fuente