2013-06-12 10 views
28

Supponiamo Ho il seguente array di dati in questa forma:AngularJs - ngOptions: Come ordinare per nome gruppo e poi da Label

var data = [{group:GroupA, label: BB}, {group:GroupB, label: DD}.....]. 

mio vincolanti sarebbe qualcosa di simile:

<select data-ng-options="c as c.label group by c.group for c in data"></select> 

Vorrei che il menu a discesa elencasse tutti gli elementi con GroupA prima di GroupB e li abbia ordinati anche sotto ciascun gruppo.

Qualcosa di simile.

GroupA 
AA 
BB 
CC 

GroupB 
DD 
EE 
FF 

So che posso usare l'ordine dal filtro Angolare, ma questo non funziona nel modo che mi serve. La mia ipotesi è che devo scrivere un filtro personalizzato che ordina manualmente l'elenco nel modo desiderato, ma mi chiedevo se esistesse un modo più semplice per eseguire l'operazione.

risposta

46

orderBy può richiedere un array di più parametri per ordinare. Così si può fare:

c as c.label group by c.group for c in data | orderBy:['group','label'] 

Here is a fiddle

+0

Grazie. Non avevo capito che puoi passare in un array all'ordine. Indovina che trascuro quella parte della documentazione di angularjs. Ma almeno sapevo che ci sarebbe stato un modo più semplice poiché sarebbe stato un caso d'uso piuttosto comune. –

+1

potresti specificare un ordinamento usando questo metodo? io voglio ordinare per gruppo asc poi etichetta desc? –

+7

@RossJones Sì, cambieresti '['group', 'label']' a '['+ group', '- label']' – sh0ber

1

Sembra che orderBy funzionerebbe esattamente come si desidera.

Basta prendere la tua espressione e aggiungere l'orderBy alla fine:

c as c.label group by c.group for c in data | orderBy:'label' 

Questo sarà prima ordinare il data matrice in base al valore della proprietà di ciascun elemento label, e poi raggrupparli. Poiché i dati saranno stati ordinati correttamente, ciascun gruppo verrà visualizzato correttamente.

Here's a fiddle.

Si noti come la matrice iniziale è definita in modo all'indietro, ma si ordina correttamente in ogni gruppo nella select.

+0

che in realtà non garantirebbe Gruppo A prima di Gruppo B. se avete Gruppo A contenga solo "GG, HH, II", l'ordine sarebbe rovesciato. Credo di aver dato un caso di esempio negativo. : P. In effetti, sono riuscito a far funzionare tutto ciò ordinando prima per Gruppo e se i due gruppi sono uguali, quindi ordinarlo in base al valore dell'etichetta. –

Problemi correlati