2014-11-04 11 views
38

Ho bisogno di un secondo indice $ per il mio ciclo ripetizione ng nidificato. Come e dove dovrei metterlo?

AngularJS site dice

Creazione di alias per queste proprietà è possibile con ngInit. Questo può essere utile quando, ad esempio, ngRepeats nidifica.

<div ng-repeat="person in persons track by $index"> 
    <div ng-repeat="something in array track by $index2"> <!-- where to init this and how to manage it?--> 

Se uso di nuovo $ indice, sembra funzionare ma non sono sicuro che questa sia la cosa giusta? Sono sicuro che esiste un modo semplice e corretto per farlo, ma non sono riuscito a trovare un esempio.

Grazie

risposta

109

$index faranno riferimento all'indice sulla più interna ngRepeat campo di applicazione, quindi se questo è quello che vi serve, si può solo usare.

Ciò che la documentazione sta descrivendo è uno scenario in cui è necessario accedere a $index nella genitore ngRepeat. Puoi ottenerlo in due modi: Uno è quello di utilizzare $parent e un altro è utilizzare ngInit, come suggerito dai documenti Angular. Ecco un esempio ...

<li ng-repeat="thing in things" ng-init="parentIndex = $index"> 
    {{ $index }} 
    <ul> 
     <li ng-repeat="value in thing.values"> 
      {{ value }} 
      {{ $index }} <!-- inner $index --> 
      {{ $parent.$index }} <!-- parent $index --> 
      {{ parentIndex }} <!-- also parent $index --> 
     </li> 
    </ul> 
</li> 

Fiddle

+0

Esattamente quello che volevo sapere. Era un po 'confuso con i documenti. Grazie – trainoasis

+0

Vale la pena notare che funziona per qualsiasi oggetto javascript disponibile. L'ho usato per creare un alias per i loop esterni $ last boolean per renderlo disponibile nel ciclo interno. – Skurpi

+2

Con questo approccio molto molto attento se si intende eliminare qualsiasi elemento dell'elenco in seguito dall'array. Ad esempio, se si eliminano elementi dell'array dall'array 'things', $ index si aggiorna automaticamente per riflettere il nuovo stato dell'array, ma' parentIndex' punta ancora all'indice dell'elemento eliminato. Questo sarà un grosso problema quando si tratta della cancellazione. Il 'parentIndex' rifletterà correttamente dopo aver salvato lo stato e aggiornato la pagina, ovvero devi ri-renderizzare l'elenco di array per mostrare gli indici aggiornati. Ho pensato a questo dopo aver lottato con esso per 3 giorni. – Devner