web-dev-qa-db-ja.com

Angularjs:ng-optionsグループ化

私はこの1レベルのツリー状況を持っています:

<select ng-model="tipost" 
        ng-options="tip.DESC group by tip.TIPIS for tip in tipall"><br>
</select>



jsonは次のとおりです。

[
  {"ID":"1", "IDPARENT":"0", "TIPIS":"", "DESC":"GroupName1"},
  {"ID":"2", "IDPARENT":"1", "TIPIS":"GroupName1", "DESC":"CHILDNAME1"},
  {"ID":"3", "IDPARENT":"0", "TIPIS":"", "DESC":"GroupName2"}
]


問題は、これにより、子を持つoptgroupが作成されますが、ルートも繰り返されることです。

- GroupName1
- GroupName2
[ GroupName1 ]
- CHILDNAME1
[ GroupName2 ]


私は生産したい:

[ GroupName1 ]
- CHILDNAME1
[ GroupName2 ]


25
daniel

Jsonを次のように変更すると、グループ化はそれほどうまくいきません。

[
 {"ID":"1", "TIPIS":"GroupName1", "DESC":"name"},
 {"ID":"2", "TIPIS":"GroupName1", "DESC":"name1"},
 {"ID":"3", "TIPIS":"GroupName2", "DESC":"name2"},
 {"ID":"4", "TIPIS":"GroupName1", "DESC":"name3"},
]

その後、あなたはあなたが望むようにグループ化を取得します

jsFiddle: http://jsfiddle.net/rtCP3/182/

34
Mathew Berg

私は同じ質問を探していて、より良い答えを見つけました。 getGarageNameの下のクエリのように、必要に応じて関数を使用してデータを返すことができます

ng-options="car.id as car.name + ' (' + car.color + ')' group by getGarageName(car.garageId) for car in cars"
// this is the data
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"},
    ...
]

http://www.wenda.io/questions/2597799/angular-js-select-with-ngoptions-label-the-optgroup.html

6
malibeg