J'ai donc un ng-repeat imbriqué dans un autre ng-repeat afin de construire un menu nav. Sur chacun <li>
de la boucle interne ng-repeat, j'ai défini un ng-click qui appelle le contrôleur approprié pour cet élément de menu en passant l'index $ pour faire savoir à l'application dont nous avons besoin. Cependant, je dois également passer l'index $ à partir de la répétition externe ng afin que l'application sache dans quelle section nous nous trouvons ainsi que quel tutoriel.
<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>
voici un Plunker http://plnkr.co/edit/bJUhI9oGEQIql9tahIJN?p=preview
ng-click="loadFromMenu(section)"
. Passer $ index signifie que vous ferez une boucle pour trouver l'objet qui n'est pas nécessaire.Réponses:
Chaque ng-repeat crée une portée enfant avec les données transmises et ajoute également une
$index
variable supplémentaire dans cette portée.Donc, ce que vous devez faire, c'est atteindre la portée parent et l'utiliser
$index
.Voir http://plnkr.co/edit/FvVhirpoOF8TYnIVygE6?p=preview
la source
ng-click="loadFromMenu($parent.$index, $index)"
loadFromMenu($parent.$parent.$index,$index)
et dans certains dont vous avez besoin, l'loadFromMenu($parent.$index,$index)
utilisationthis....
ne fonctionnera tout simplement pas.Solution beaucoup plus élégante que celle
$parent.$index
utiliséeng-init
:Plunker: http://plnkr.co/edit/knwGEnOsAWLhLieKVItS?p=info
la source
ng-init
été démontrée dans lesng-init
documents sans aucune mention dans lesng-repeat
documents, j'ai donc écrit ici + modifié les documents sur Github. Lang-repeat
syntaxe actuelle a un meilleur moyen d'y parvenir, ce qui est démontré par @Okazari. Il est exempt de quelques imperfections que vous avez mentionnées dans les commentaires.Qu'en est-il de l'utilisation de cette syntaxe (jetez un oeil dans ce plunker ). Je viens de découvrir cela et c'est assez génial.
Exemple:
Avec cette syntaxe, vous pouvez donner votre propre nom
$index
et différencier les deux index.la source
Juste pour aider quelqu'un qui arrive ici ... Vous ne devriez pas utiliser $ parent. $ Index car ce n'est pas vraiment sûr. Si vous ajoutez un ng-if à l'intérieur de la boucle, vous obtenez le $ index foiré!
La bonne façon
Vérifier: plnkr.co/52oIhLfeXXI9ZAynTuAJ
la source
Lorsque vous traitez avec des objets, vous voulez ignorer les identifiants simples autant que possible.
Si vous changez la ligne de clic en ceci, je pense que vous serez sur la bonne voie:
De plus, je pense que vous devrez peut-être changer
à quelque chose comme
Voir http://docs.angularjs.org/misc/faq et recherchez ng-class.
la source
Utilisez simplement
ng-repeat="(sectionIndex, section) in sections"
et cela sera utilisable au niveau suivant ng-repeat down.
la source