2015-03-21 6 views
15

Sto sviluppando la posta in arrivo per i messaggi con AngularJs e mi sono imbattuto in un problema: voglio mostrare solo l'ultimo elemento all'interno di ng-repeat. Ho fatto qualche ricerca e ho scoperto che il codice qui sotto dovrebbe funzionare.ng-repeat mostra solo l'ultimo elemento

<div class="inbox" ng-repeat="recipient in messages"> 
    <ul> 
    <div> 
     <span> {{recipient.$id}} <br> </span> 
     <li class="inboxItem"> 
     <span ng-repeat="messages in recipient"> {{messages.sender}} {{messages.message}} <br></span> 
     </li> 
    </div> 
    </ul> 
</div> 

Tuttavia, non è così. Potete dirmi cosa sto sbagliando? Ho pensato che array.length-1 dovrebbe limitare ng-repeat per mostrare solo l'ultimo oggetto in una matrice.

Grazie!

+2

perché si desidera utilizzare ng-repeat per mostrare solo un elemento? –

+0

La mia struttura dati è descritta in questo argomento: http://stackoverflow.com/questions/29166236/iterate-over-array-which-includes-objects E la sua più complicata è farlo senza ng-repeat (almeno con il mio set di competenze) – uksz

risposta

34

uso angularjs $last in ng-repeat. qui è the doc

<div ng-repeat="n in data track by $index"> 
    <span ng-show="$last">{{n}}</span> 
</div> 

<span ng-show="$last">{{n}}</span> quando la sua ultima ripetizione $last sarà true altrimenti la sua false in modo da poter usare ng-show o ng-if con $last.

ecco un sample demo


UPDATE Credo che non ha bisogno di ng-repeat lì in quanto è necessario per mostrare l'ultimo elemento dell'array (questo è lo stesso come la risposta di @ Michael P. Bazos), per farlo:

$scope.data = [42, 42, 43, 43, 50]; 

print the last value as : {{ data[data.length-1] }} 

ecco l'demo

ma se hai davvero bisogno di fare con ng-repeat fai questo

[data[data.length-1]] crea un array solo con l'ultimo elemento.

<div ng-repeat="n in [data[data.length-1]] track by $index"> 
    <span>{{n}}</span> 
</div> 

demo

+0

Funziona! Grazie mille! – uksz

+0

felice di aiutarti :) –

+0

Fantastico! Ha aiutato molto! :) Grazie! – Lightning3

9

Si potrebbe usare limitTo filtro con -1

Esempio:

<div ng-repeat="friend in friends | limitTo: -1"> 
    {{friend.name}} 
</div> 

Vedi fiddle

Ma se si sta mostrando un solo elemento, forse si vuole ottenere liberare il ng-repeat ...:

<div> 
    {{friends[friends.length - 1].name}} 
</div> 
+0

Quindi ho implementato il "limitTo: -1" ma sembra che non abbia alcun effetto sui dati visualizzati.Sto usando ng-repeat, perché la mia struttura dati ha richiesto ng-repeat nidificato (ogni messaggio nei destinatari ha un ID univoco da firebase) La mia struttura dati è descritta qui: http://stackoverflow.com/questions/29166236/iterate- over-array-which-includes-objects – uksz

+0

Modifica il violino con i dati di esempio come nella tua app, vedrò cosa posso fare. –

+0

AGGIUNGI: "limitTo: -1" funziona effettivamente sulla ripetizione esterna, tuttavia non funziona sulla ripetizione interna. – uksz

0

Qualcosa del genere dovrebbe funzionare.

<div ng-repeat="something in vm.somethings"> 
    <span ng-show="$last">{{ something.value }}</span> 
</div> 
Problemi correlati