10

我刚开始玩 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)
-----------------

但我想将 optgroups 标记为“Garage 1”、“Garage 2”……甚至更好地显示车库的名称,而不仅仅是garageId。

select的angularjs.org 文档没有说明 optgroup 的标签,但我想通过 ngOptions 的一部分来扩展该组,例如group by car.garageId as 'Garage ' + car.garageIdor group by car.garageId as getGarageName(car.garageId)-遗憾的是它不起作用

到目前为止,我唯一的解决方案是向汽车对象添加一个新属性“garageDisplayName”,并将 id + 车库名称存储在那里,并将其用作按参数分组。但我不想在车库名称更改时更新所有汽车。

有没有办法用 ngOptions 标记 optgroup,或者在这种情况下我应该使用 ngRepeat 吗?

4

1 回答 1

21

您可以getGarageName()group by不使用as...

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

您可能需要考虑在garages 数组中存储对garage 对象的引用,而不是将garage id 存储在每辆车中。这样您就可以更改车库名称,而无需更改每辆车。简单地group by变成......

group by car.garage.name

于 2014-04-12T21:44:26.853 回答