2015-03-21 13 views
15

Rozwijam skrzynkę odbiorczą dla wiadomości z AngularJs, natknąłem się na jeden problem: chcę pokazać tylko ostatni element w ramach ng-repeat. Zrobiłem trochę badań i okazało się, że poniższy kod powinien zadziałać.ng-repeat pokaż tylko ostatni element

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

Jednak tak się nie dzieje. Czy możecie mi powiedzieć, co robię źle? Pomyślałem, że array.length-1 powinien ograniczyć powtórzenie ng, aby pokazać tylko ostatni obiekt w tablicy.

Dzięki!

+2

dlaczego chcesz użyć ng-repeat, aby wyświetlić tylko jeden element? –

+0

Moja struktura danych jest opisana w tym temacie: http://stackoverflow.com/questions/29166236/iterate-over-array- which-includes-objects I jest to bardziej skomplikowane, aby zrobić to bez powtarzania ng (przynajmniej z moim zestawem umiejętności) – uksz

Odpowiedz

34

użycie angularjs $last w ng-repeat. tutaj jest the doc

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

<span ng-show="$last">{{n}}</span> gdy jego ostatnie powtórzenie $last będzie true inaczej jego false więc można użyć ng-show lub ng-if z $last.

o to sample demo


UPDATE myślę nie potrzebuje NG-repeat tam ponieważ trzeba pokazać ostatni element tablicy (to jest taka sama jak odpowiedź @Michael P. Bazos za), aby to zrobić:

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

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

oto demo

ale jeśli naprawdę potrzebujesz zrobić z ng-repeat zrobić, to ta tablica jest tworzona tylko z ostatnim elementem.

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

demo

+0

To działa! Dzięki wielkie! – uksz

+0

cieszę się, że mogę Ci pomóc :) –

+0

Awesome! To bardzo pomogło! :) Dzięki! – Lightning3

9

Można użyć limitTo filtr z -1

Przykład:

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

Zobacz fiddle

Ale jeśli są wyświetlane tylko jeden element, może chcesz dostać pozbyć się ng-repeat ...:

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

Wprowadziłem więc "limitTo: -1", ale wydaje się, że nie ma to wpływu na wyświetlane dane.Używam ng-repeat, ponieważ moja struktura danych wymagała zagnieżdżonego powtórzenia ng (każda wiadomość u odbiorcy ma unikalny identyfikator z firebase) Moja struktura danych jest opisana tutaj: http://stackoverflow.com/questions/29166236/iterate- over-array-co-includes-objects – uksz

+0

Edytuj skrzypce z przykładowymi danymi, tak jak w twojej aplikacji. Zobaczę, co da się zrobić. –

+0

ADD: "limitTo: -1" rzeczywiście działa na zewnętrzne powtórzenie, jednak nie działa na wewnętrznym powtórzeniu. – uksz

0

Coś jak to powinno działać.

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