2015-04-14 10 views
6

Ho una matrice di oggetti che desidero ordinare dinamicamente, in base a un valore da un menu a discesa. Questo è quello che ho finora nella mia lista:Ordine dinamico in AngularJS

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

Ma il problema però è che l'ordinamento può essere un attributo dell'oggetto o di un valore calcolato utilizzando una funzione. Dovrebbe anche essere in grado di ordinare in modo discendente (facoltativamente).

so di poter utilizzare una stringa per la variabile canByAnything dietro l'orderBy passando un attributo dell'oggetto come:

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

so anche che posso OrdinaPer una funzione come:

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 

Ma quello che non so e voglio raggiungere è:

  • Come combinarlo in modo da poter usare le funzioni per l'ordinamento i n combinazione con attributi/proprietà degli oggetti. Intendo l'una o l'altra, in modo dinamico, in base a ciò che l'utente ha selezionato. Quale può essere un attributo o un valore calcolato, decrescente o ascendente.
  • come ordinare un valore calcolato in modo discendente

risposta

10

Aggiornamento orderBy:myCalculatedValueFunction a qualcosa di simile orderBy:dynamicOrderFunction:

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

orderBy ha anche una terza proprietà che accetta un valore booleano e orderBy inverte quando true. (orderBy:dynamicOrderFunction:reverseOrder dove $scope.reverseOrder = true; // or false)


modificare

Sarà effettivamente incorrere in problemi che cercano di cambiare orderBy tra una stringa di una funzione in questo modo. Checkout out this jsfiddle per una funzione di ordine dinamico funzionante.

+0

questo funziona molto utile –

0

Quindi devi creare il tuo filtro e fare ciò che vuoi, c'è un sacco di esempi su google. Basta cercare:

filtro angolare personalizzato

Tesi ultimi giorni, ho esperienza somes problemi con la creazione di filtri e ho scoperto che: https://github.com/a8m/angular-filter

ho aggiunto subito nei miei dependcies, lo so lo userò molto presto. Potrebbe essere che ti aiuterà anche. Non dimenticare di confermare la mia risposta se ti aiuta a risolvere il tuo problema;)

Problemi correlati