2014-04-12 10 views
8

Właśnie zacząłem grać z Angular.js i mam pytanie dotyczące ngOptions: Czy można oznaczyć grupę optyczną?Angular.js Wybierz z ngOptions: Oznacz grupę optyczną

Pozwala założyć 2 obiekty - samochody i garaże.

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"}, 
    ... 
] 

Z tym kodem mam prawie wynik chcę:

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

skutkować wybierz:

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

Ale chcę oznakować optgroups jak "Garaż 1" "Garaż 2" ... lub jeszcze lepiej wyświetla nazwę garażu, a nie tylko garaż.

angularjs.org documentation for select mówi nic na temat etykiet do optgroup, ale chciałbym rozszerzyć grupę przez część ngOptions jak group by car.garageId as 'Garage ' + car.garageId lub group by car.garageId as getGarageName(car.garageId) - który niestety nie działa.

Jedynym moim dotychczasowym rozwiązaniem jest dodanie nowej właściwości "garageDisplayName" do obiektów samochodu i zapisanie jej nazwy id + garage i użycie jej jako grupy według parametru. Ale nie chcę aktualizować wszystkich samochodów za każdym razem, gdy zmieni się nazwa garażu.

Czy istnieje sposób na oznaczenie optgroups za pomocą ngOptions, czy powinienem użyć w tym przypadku ngRepeat?

Odpowiedz

19

Możesz po prostu zadzwonić getGarageName() w group by bez użycia as ...

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

Zamiast przechowywać identyfikator Garaż w każdym samochodzie, warto rozważyć przechowywania odwołanie do obiektu Garaż w garażuje tablicę. W ten sposób możesz zmienić nazwę garażu i nie ma potrzeby zmiany każdego samochodu. A group by po prostu staje się ...

group by car.garage.name

+0

Dzięki wielkie! Zawsze próbowałem go z częścią 'as' zamiast zamiast pisać wyrażenie, które chcę wyświetlić. :) Można więc także zrobić "group by" Garage "+ car.garageId'. –

+0

I jak zasugerowałeś, rozważałem zapisanie odniesienia garażu zamiast identyfikatora i skończyłem z tym: 'group by car.garage.name + '-' + car.garage.id' _ (nazwa garażu nie jest unikatowa) _ co w rzeczywistości jest prostsze. –