Jak mogę uzyskać odwrócony układ kątowy? Próbuję użyć filtru orderBy, ale do sortowania potrzeba predykatu (np. „name”):
<tr ng-repeat="friend in friends | orderBy:'name':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
Czy istnieje sposób na odwrócenie oryginalnej tablicy bez sortowania. tak:
<tr ng-repeat="friend in friends | orderBy:'':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
ng-repeat
zachowania! @Trevor Senior wykonał dobrą robotę.Odpowiedzi:
Sugeruję użycie niestandardowego filtra, takiego jak ten:
Które można następnie wykorzystać jako:
Zobacz, jak działa tutaj: demonstracja plunkera
Ten filtr można dostosować do własnych potrzeb. Podałem inne przykłady podczas demonstracji. Niektóre opcje obejmują sprawdzenie, czy zmienna jest tablicą przed wykonaniem operacji odwrotnej, lub uczynienie jej bardziej łagodnym, aby umożliwić odwrócenie większej liczby rzeczy, takich jak łańcuchy.
źródło
items.reverse()
modyfikuje tablicę, zamiast tworzyć nową i zwracać ją.slice()
aby rozwiązać ten problem.if (!angular.isArray(items)) return false;
aby sprawdzić, czy macie tablicę przed próbą jej odwrócenia.Właśnie tego użyłem:
Aktualizacja:
Moja odpowiedź była dobra dla starej wersji Angulara. Teraz powinieneś używać
ng-repeat="friend in friends | orderBy:'-'"
lub
z https://stackoverflow.com/a/26635708/1782470
źródło
track by
, to jedyny sposób, który zadziałał dla mnieng-repeat="friend in friends | orderBy:'+': true track by $index"
Przepraszam, że o tym wspomniałem po roku, ale jest nowe, łatwiejsze rozwiązanie , które działa dla Angulara v1.3.0-rc.5 i nowszych .
Jest wspomniany w dokumentach : „Jeśli nie podano żadnej właściwości (np.„ + ”), Wówczas do porównania miejsca sortowania używany jest sam element tablicy”. Tak więc rozwiązaniem będzie:
ng-repeat="friend in friends | orderBy:'-'"
lubng-repeat="friend in friends | orderBy:'+':true"
To rozwiązanie wydaje się lepsze, ponieważ nie modyfikuje tablicy i nie wymaga dodatkowych zasobów obliczeniowych (przynajmniej w naszym kodzie). Przeczytałem wszystkie istniejące odpowiedzi i nadal wolę tę od nich.
źródło
v1.3.0-rc.4
). Jeśli ktoś ma szansę wypróbować go w nowej wersji, daj nam znać!v1.3.0-rc.5
( rc.5 docs vs rc.4 docs ). Zaktualizowałem odpowiedźorderBy:'+':true
,orderBy:'-':true
,orderBy:'-':false
,orderBy:'+':false
:(Możesz odwrócić za pomocą parametru $ index
źródło
$index
). Jestem na Angular 1.1.5.ng-repeat="friend in friends | orderBy:'id':true"
działa.Proste rozwiązanie: - (nie trzeba wykonywać żadnych metod)
źródło
Możesz po prostu wywołać metodę w swoim zasięgu, aby ją odwrócić, na przykład:
Zauważ, że
$scope.reverse
tworzy kopię tablicy, ponieważArray.prototype.reverse
modyfikuje oryginalną tablicę.źródło
jeśli używasz 1.3.x, możesz użyć następujących
Przykład Lista książek według daty publikacji w kolejności malejącej
źródło: https://docs.angularjs.org/api/ng/filter/orderBy
źródło
Jeśli używasz angularjs w wersji 1.4.4 i nowszej , łatwym sposobem sortowania jest użycie „ $ index ”.
zobacz demo
źródło
Korzystając z MVC w .NET z Angularem, zawsze możesz użyć OrderByDecending () podczas wykonywania zapytania db w następujący sposób:
Następnie po stronie Angulara zostanie już odwrócony w niektórych przeglądarkach (IE). W przypadku obsługi Chrome i FF należy dodać zamówienie:
W tym przykładzie sortowałbyś w kolejności malejącej według właściwości .Id. Jeśli używasz stronicowania, staje się to bardziej skomplikowane, ponieważ sortowana byłaby tylko pierwsza strona. Trzeba by to obsłużyć za pomocą pliku filtru .js dla kontrolera lub w inny sposób.
źródło
Możesz także użyć .reverse (). Jest to natywna funkcja tablicowa
<div ng-repeat="friend in friends.reverse()">{{friend.name}}</div>
źródło
reverse
odwraca tablicę na miejscu, nie tylko zwraca odwróconą kopię. Oznacza to, że za każdym razem, gdy jest to oceniane, tablica będzie odwracana.To dlatego, że używasz obiektu JSON. Gdy napotkasz takie problemy, zmień swój obiekt JSON na obiekt JSON Array.
Na przykład,
źródło
orderBy
Filtra wykonuje stabilny sortowania jako kątowa 1.4.5. (Zobacz żądanie ściągnięcia GitHub https://github.com/angular/angular.js/pull/12408 .)Wystarczy więc użyć stałego predykatu i
reverse
ustawić natrue
:źródło
Znalazłem coś takiego, ale zamiast tablicy używam obiektów.
Oto moje rozwiązanie dla obiektów:
Dodaj niestandardowy filtr:
Które można następnie wykorzystać jak
Jeśli potrzebujesz obsługi starej przeglądarki, musisz zdefiniować funkcję zmniejszania (jest dostępna tylko w ECMA-262 mozilla.org )
źródło
Sam byłem sfrustrowany tym problemem, dlatego zmodyfikowałem filtr utworzony przez @Trevor Senior, gdy miałem problem z konsolą, mówiąc, że nie można użyć metody odwrotnej. Ja również chciałem zachować integralność obiektu, ponieważ to właśnie Angular pierwotnie używa w dyrektywie powtarzania ng. W tym przypadku użyłem danych wejściowych głupek (klawisz), ponieważ konsola się zdenerwuje, mówiąc, że są duplikaty, aw moim przypadku muszę śledzić według $ index.
Filtr:
HTML:
<div ng-repeat="items in items track by $index | reverse: items">
źródło
Dodam jedną odpowiedź, o której nikt nie wspomniał. Spróbowałbym zmusić serwer do zrobienia tego, jeśli taki masz. Filtrowanie po stronie klienta może być niebezpieczne, jeśli serwer zwróci wiele rekordów. Ponieważ możesz zostać zmuszony do dodania stronicowania. Jeśli masz stronicowanie z serwera, filtr klienta na zamówienie, będzie na bieżącej stronie. Co wprowadzałoby użytkownika w błąd. Jeśli więc masz serwer, wyślij zamówienie wraz z połączeniem i pozwól, aby serwer je zwrócił.
źródło
Przydatna wskazówka:
Możesz odwrócić swoją tablicę za pomocą waniliowej Js: twoja tablica .reverse ()
Uwaga: odwrócenie jest destrukcyjne, więc zmieni tablicę, a nie tylko zmienną.
źródło
Sugerowałbym, że użycie natywnej metody odwrotnej do tablicy jest zawsze lepszym wyborem niż tworzenie filtra lub używanie
$index
.Plnkr_demo .
źródło