325 votes

passant 2 valeurs d'index $ dans ng-repeat imbriqué

J'ai donc une ng-cliquez sur imbriquée dans une autre ng-cliquez sur afin de construire une nav menu. Sur chaque <li> sur l'intérieure de la ng-repeat I de la boucle de définir une ng-cliquez sur lesquels les appels pertinents contrôleur pour que l'élément de menu en passant dans le $index de laisser l'application connaître celui que nous avons besoin. Cependant j'ai besoin de transmettre aussi dans le $index à partir de l'extérieur ng-repeat ainsi, l'application sait la section qui nous sommes en tant que bien que qui 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

475voto

Alex Osborn Points 2756

Chaque ng-repeat crée une portée enfant avec les données transmises et ajoute également une variable $index supplémentaire dans cette portée.

Donc, ce que vous devez faire est d'atteindre la portée parent, et utilisez ce $index .

Voir http://plnkr.co/edit/FvVhirpoOF8TYnIVygE6?p=preview

 <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu($parent.$index)" ng-repeat="tutorial in section.tutorials">
    {{tutorial.name}}
</li>
 

205voto

vucalur Points 1730

Way solution plus élégante whan $parent.$index utilise 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

3voto

kwerle Points 441

Lorsque vous traitez des objets, vous voulez ignorer les identifiants simples autant que possible.

Si vous changez la ligne de clic à cela, je pense que vous serez sur votre chemin:

 <li class="tutorial_title {{tutorial.active}}" ng-click="loadFromMenu(tutorial)" ng-repeat="tutorial in section.tutorials">
 

Aussi, je pense que vous devrez peut-être changer

 class="tutorial_title {{tutorial.active}}"
 

à quelque chose comme

 ng-class="tutorial_title {{tutorial.active}}"
 

Voir http://docs.angularjs.org/misc/faq et cherchez ng-class.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X