2013-08-18 12 views
7

Mi chiedo se esiste una soluzione semplice a questo tipo di problema.ng-repeat numero sconosciuto di elementi nidificati

Ho un commento oggetto, che a sua volta può contenere commenti, e quei commenti possono contenere anche commenti ... e questo può andare avanti per un numero sconosciuto di cicli.

Ecco un esempio di struttura dei dati:

var comment = { 
    text : "", 
    comments: [ 
     { text: "", comments : []}, 
     { text: "", comments: [ 
     { text: "", comments : []}, 
     { text: "", comments : []} 
     { text: "", comments : []} 
     ]} 
    ] 
} 

Consente di dire con 2 livelli di commenti avrei scritto:

<div ng-repeat="comment in comments"> 
    {{comment.text}} 
    <div ng-repeat="comment in comments"> 
     {{comment.text}} 
    </div> 
</div> 

Come avrei implent miei div per il livello "n" di commenti annidati?

risposta

9

Il modo più semplice è creare un partial generico in modo da poter richiamarlo e renderlo in modo ricorsivo utilizzando ng-include.

<div ng-include="'partialComment.html'" ng-model="comments"></div> 

Ecco il parziale:

<ul> 
    <li ng-repeat="c in comments"> 
     {{c.text}} 
     <div ng-switch on="c.comments.length > 0"> 
     <div ng-switch-when="true"> 
      <div ng-init="comments = c.comments;" ng-include="'partialComment.html'"></div> 
     </div> 
     </div> 
    </li> 
</ul> 

Il modello di dati dovrebbe essere un elenco var comments = [{ ... }].

Ho creato una demo per te e spero che sia d'aiuto.

Demo

+0

Ci sarebbe un modo per nascondere tutti gli elementi tranne il primo set nella ricorsione? – guiomie

+0

@guiomie è possibile controllare il primo parametro $ nel ripetitore ng. – zsong

+0

quello che intendo è nascondere tutti gli elementi che non sono nel primo array, non i primi elementi di ogni array. Quindi solo gli elementi del primo array di commenti non sono nascosti ... – guiomie

1

È necessaria una direttiva ricorsiva. Qualcosa come this, o probabilmente meglio this.

+0

Il collegamento [gistflow] (http://gistflow.com/posts/843-creating-recursive-templates-in-angular-js) è morto. –

Problemi correlati