2015-03-21 6 views
15

Ich entwickle Posteingang für Nachrichten mit AngularJs, und ich stieß auf ein Problem: Ich möchte nur das letzte Element innerhalb ng-repeat zeigen. Ich habe etwas recherchiert und herausgefunden, dass der folgende Code funktionieren sollte.ng-repeat nur letztes Element anzeigen

<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> 

Allerdings nicht. Kannst du mir sagen, was mache ich falsch? Ich dachte, dass array.length-1 ng-repeat begrenzen sollte, um nur das letzte Objekt in einem Array zu zeigen.

Danke!

+2

Warum möchten Sie ng-repeat verwenden, um nur ein Element anzuzeigen? –

+0

Meine Datenstruktur wird in diesem Thema beschrieben: http://stackoverflow.com/questions/29166236/iterate-over-array-which-includes-objects Und es ist komplizierter, es ohne ng-Wiederholung zu tun (zumindest mit meinem Satz von Skills) – uksz

Antwort

34

Verwendung AngularJS $last in ng-repeat. hier ist the doc

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

<span ng-show="$last">{{n}}</span>, wenn seine letzte Wiederholung $last wird true sonst seine false so können Sie ng-show oder ng-if mit $last verwenden.

hier ein sample demo


UPDATE ist glaube ich keine Notwendigkeit von ng-repeat dort seit Sie das letzte Element des Arrays zeigen müssen (dies ist der gleiche wie @ Michael P. Bazos Antwort), das zu tun:

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

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

hier die demo

ist aber Wenn Sie wirklich tun müssen mit ng-Wiederholung tun, wie dies

[data[data.length-1]] erstellen Sie ein Array nur mit dem letzten Element.

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

demo

+0

Es funktioniert! Vielen Dank! – uksz

+0

froh, Ihnen zu helfen :) –

+0

Awesome! Es hat sehr geholfen! :) Vielen Dank! – Lightning3

9

könnten Sie verwenden limitTo Filter mit -1

Beispiel:

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

fiddle

sehen Aber wenn Sie nur ein Element zeigt, vielleicht möchten Sie bekommen los von ng-repeat ...:

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

Also habe ich das "limitTo: -1" implementiert, aber es scheint keinen Effekt auf die angezeigten Daten zu haben.Ich benutze ng-repeat, weil meine Datenstruktur eine verschachtelte ng-Wiederholung benötigt (jede Nachricht in Empfängern hat eine eindeutige ID von firebase) Meine Datenstruktur ist hier beschrieben: http://stackoverflow.com/questions/29166236/iterate- over-array-which-includes-objects – uksz

+0

Bearbeiten Sie die Geige mit Beispieldaten wie in Ihrer App, ich werde sehen, was ich tun kann. –

+0

HINZUFÜGEN: "limitTo: -1" arbeitet zwar an der äußeren ng-Wiederholung, funktioniert jedoch nicht an der inneren ng-Wiederholung. – uksz

0

So etwas sollte funktionieren.