Wypełniam listę rozwijaną za pomocą opcji ng-options, która jest podłączona do kontrolera, który z kolei wywołuje usługę. Niestety napływające dane są bałaganem i muszę być w stanie posortować je alfabetycznie.
Myślisz, że coś takiego $.sortBy
by to zrobiło, ale niestety nie zrobiło to jack. Wiem, że mogę to posortować za pomocą javascript za pomocą metody pomocniczej function asc(a,b)
lub czegoś podobnego, ale nie wierzę, że nie ma na to czystszego sposobu, a ponadto nie chcę nadużywać kontrolera metodami pomocniczymi. Jest to w zasadzie coś tak podstawowego, że nie rozumiem, dlaczego AngularJS tego nie ma.
Czy jest sposób na zrobienie czegoś takiego $orderBy('asc')
?
Przykład:
<select ng-option="items in item.$orderBy('asc')"></select>
Niezwykle przydatne byłoby posiadanie opcji, orderBy
dzięki którym możesz robić, co chcesz, za każdym razem, gdy zwykle próbujesz sortować dane.
selected
. W tym przykładzie możesz zrobić coś takiego$scope.selected = $scope.friends[0]
. Zobacz te skrzypce dla próbki roboczej.f.age as f.name for f in friends | orderBy:'name'
- oto działające skrzypce. Więcej na temat opcji ngowych tutaj .<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name' track by f.id"></selected>
. Umieszczanietrack by
filtra po zamówieniu nie było intuicyjne, a ta odpowiedź jest najlepszym wynikiem wyszukiwania w Google.Powinieneś być w stanie użyć filtra:
orderBy
orderBy
może zaakceptować trzecią opcję dlareverse
flagi.Tutaj element jest sortowany według właściwości „nazwa” w odwrotnej kolejności. Drugim argumentem może być dowolna funkcja porządkowa, więc możesz sortować według dowolnej reguły.
@see http://docs.angularjs.org/api/ng.filter:orderBy
źródło
http://jsfiddle.net/Nfv42/65/
źródło
Dla każdego, kto chce posortować zmienną w trzeciej warstwie:
możesz to zrobić w ten sposób
źródło