Angular.js Выберите с помощью ngOptions:Обозначьте optgroup
-
21-12-2019 - |
Вопрос
Я только начал играть с Angular.js и у меня возник вопрос о ngOptions:Можно ли пометить optgroup?
Предположим, что есть 2 объекта - автомобили и гаражи.
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"},
...
]
С помощью этого кода я получил почти тот результат, который я хочу:
ng-options = "car.id as car.name + ' (' + car.color + ')' group by car.garageId for car in cars"
Результат в выбранном:
-----------------
1
Diablo (red)
Countach (white)
Firebird (red)
2
Clio (silver)
Golf (black)
3
Hummer (silver)
-----------------
Но я хочу обозначить группы опций как "Гараж 1", "Гараж 2", ...или еще лучше отобразить название гаража, а не только garageId.
Тот Самый angularjs.org документация для выбора ничего не говорится о метках для optgroup, но я хотел бы расширить группу за счет части ngOptions, таких как group by car.garageId as 'Garage ' + car.garageId
или group by car.garageId as getGarageName(car.garageId)
- который, к сожалению, не работает.
Мое единственное решение на данный момент - добавить новое свойство "garageDisplayName" к объектам car и сохранить там id + название гаража и использовать это как параметр group by.Но я не хочу обновлять все автомобили всякий раз, когда меняется название гаража.
Есть ли способ пометить optgroups с помощью ngOptions, или я должен использовать ngRepeat в этом случае?
Решение
Ты можешь просто позвонить getGarageName()
в group by
без использования as
...
ng-options="car.id as car.name + ' (' + car.color + ')' group by getGarageName(car.garageId) for car in cars"
Вместо того чтобы хранить идентификатор гаража в каждом автомобиле, вы можете рассмотреть возможность сохранения ссылки на объект garage в массиве garages.Таким образом, вы можете изменить название гаража, и нет необходимости менять каждую машину.И тот group by
просто становится...
group by car.garage.name