2015-04-14 12 views
6

Mam szereg obiektów, które chcę zamówić dynamicznie, na podstawie wartości z rozwijanego menu. To jest to, co mam do tej pory w mojej listy:Dynamiczne zamówienie w AngularJS

ng-repeat="item in filteredItems = (items | filter:searchInput | orderBy:canBeAnything)" 

Ale jednak problemem jest to, że sortowanie może być atrybutem obiektu lub wartość obliczona przy użyciu funkcji. Powinien także być w stanie sortować malejąco (opcjonalnie).

wiem, że mogę użyć ciągu dla zmiennej canByAnything za orderby przechodząc atrybut obiektu jak:

“-creationDate” // descending ordering on creation date 
“customer.lastname” // ascending ordering on customers last name 

wiem też mogę orderby funkcji jak:

orderBy:myCalculatedValueFunction // will order in an ascending way based on a calculated value, for example calculating the total price of the object if it was an order or something 

Ale to, czego nie wiem i co chcę osiągnąć, to:

  • Jak je połączyć, abym mógł korzystać z funkcji do sortowania n połączenie z atrybutami/właściwościami obiektów. Mam na myśli jeden lub drugi, dynamicznie, w oparciu o to, co wybrał użytkownik. Który może być atrybutem lub wartością obliczeniową, malejącą lub rosnącą.
  • Jak sortować według wartości obliczonej w sposób zstępujący

Odpowiedz

10

Aktualizacji orderBy:myCalculatedValueFunction coś jak orderBy:dynamicOrderFunction:

$scope.dynamicOrderFunction = function() { 
    if (orderByString) { 
     return '-creationDate'; 
    } 
    else { 
     return myCalculatedValueFunction; 
    } 
} 

orderBy posiada również 3rd właściwość, która przyjmuje wartość logiczną i odwrócą orderby gdy true. (orderBy:dynamicOrderFunction:reverseOrder gdzie $scope.reverseOrder = true; // or false)


edit

Będziesz faktycznie napotkasz problemów próbuje przełączyć orderby pomiędzy ciągiem funkcję w ten sposób. Zamówienie na this jsfiddle dla działającej funkcji dynamicznego zamówienia.

+0

to działa bardzo pomocne –

0

Musisz więc stworzyć własny filtr i zrobić, co chcesz w nim, jest mnóstwo przykładów na google. Wystarczy wyszukać:

kątowe niestandardowe filtry

tez ostatnie dni, doświadczam SOMES problemy z filtrami tworzenia i znalazłem, że: https://github.com/a8m/angular-filter

Dodałem go od razu w moich dependcies, wiem wykorzystam to wkrótce. Może to też ci pomoże. Nie zapomnij o poprawieniu mojej odpowiedzi, jeśli pomoże Ci to rozwiązać problem;)