2014-04-12 22 views
8

Ho appena iniziato a giocare con Angular.js e ho una domanda su ngOptions: È possibile etichettare l'optgroup?Angular.js Selezionare con ngOptions: etichettare il gruppo opt2

Assumiamo 2 oggetti: automobili e garage.

cars = [ 
    {"id": 1, "name": "Diablo", "color": "red", "garageId": 1}, 
    {"id": 2, "name": "Countach", "color": "white", "garageId": 1}, 
    {"id": 3, "name": "Clio", "color": "silver", "garageId": 2}, 
    ... 
] 
garages = [ 
    {"id": 1, "name": "Super Garage Deluxe"}, 
    {"id": 2, "name": "Toms Eastside"}, 
    ... 
] 

Con questo codice ho avuto quasi il risultato che voglio:

ng-options = "car.id as car.name + ' (' + car.color + ')' group by car.garageId for car in cars" 

risultato nella select:

----------------- 
1 
Diablo (red) 
Countach (white) 
Firebird (red) 
2 
Clio (silver) 
Golf (black) 
3 
Hummer (silver) 
----------------- 

Ma voglio etichettare i optgroups come "Garage 1", "Garage 2", ... o ancora meglio visualizzare il nome del garage e non solo il garage.

Il angularjs.org documentation for select dice nulla circa le etichette per l'optgroup, ma vorrei estendere il gruppo da parte di ngOptions come group by car.garageId as 'Garage ' + car.garageId o group by car.garageId as getGarageName(car.garageId)-che purtroppo non funziona.

La mia unica soluzione è di aggiungere una nuova proprietà "garageDisplayName" agli oggetti auto e memorizzare lì il nome id + garage e usarlo come gruppo per parametro. Ma non voglio aggiornare tutte le macchine ogni volta che viene modificato il nome di un garage.

C'è un modo per etichettare gli optgroup con ngOptions, o dovrei usare ngRepeat in quel caso?

risposta

19

si può chiamare getGarageName() nel group by senza utilizzare un as ...

ng-options="car.id as car.name + ' (' + car.color + ')' group by getGarageName(car.garageId) for car in cars" 

Invece di memorizzare l'id garage in ogni vettura, si potrebbe prendere in considerazione la memorizzazione di un riferimento all'oggetto garage nel array di garage. In questo modo puoi cambiare il nome del garage e non è necessario cambiare ogni auto. E il group by diventa semplicemente ...

group by car.garage.name

+0

Grazie mille! L'ho sempre provato con la parte 'as' invece di scrivere solo l'espressione che voglio mostrare. :) Quindi è anche possibile eseguire 'group by 'Garage' + car.garageId'. –

+0

E come hai suggerito, ho considerato di memorizzare il riferimento del garage invece dell'ID e ho terminato con questo: 'group by car.garage.name + '-' + car.garage.id' _ (il nome del garage non è univoco) _ che in effetti è più semplice. –

Problemi correlati