Angularjs: группа ng-options по

У меня есть ситуация с одноуровневым деревом:

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


проблема в том, что это создает группы опций с их дочерними элементами, но также повторяет корни:

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


я хочу производить:

[ GroupName1 ]
- CHILDNAME1
[ GroupName2 ]



person daniel    schedule 04.09.2013    source источник


Ответы (3)


Группировка не совсем так работает, если вы измените свой 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/

person Mathew Berg    schedule 04.09.2013
comment
Правильно, но есть ли способ показать корни как варианты, когда у них нет дочерних элементов, и как группу выбора, когда они есть? таким образом, я могу видеть корни как optgroup и как опцию этой группы. - person daniel; 04.09.2013
comment
Вы хотите, чтобы корни были вариантами, когда у них нет выбора дочернего элемента? - person Mathew Berg; 04.09.2013
comment
да потому что desc и tipis это одно и то же.. и этот способ дублирует.. optgroup равна первому варианту. - person daniel; 04.09.2013
comment
Но если у optgroup есть дети, вы не хотите выбирать optgroup? Обычно вы не можете выбирать optgroups, вам нужно сделать их дочерними. - person Mathew Berg; 04.09.2013
comment
на самом деле я не хочу их выбирать ... но есть случаи, когда корни можно выбрать, и в этом случае я хочу, чтобы корни были вариантами, а не группами опций с одним и тем же параметром метки. - person daniel; 04.09.2013
comment
Хорошо, у меня есть какое-то решение... если я получу все элементы, у которых нет дочерних элементов... таким образом я могу получить варианты корней без элементов... и каждую оптгруппу только с дочерними элементами. поэтому, если группа корней (типы - это ''), то это будет просто вариант... в то время как если типи имеет какое-то значение, оно будет внутри группы опций. Спасибо за направление. - person daniel; 04.09.2013

Простой раскрывающийся список, в котором могут отображаться элементы с группами и без них, а также вы можете сделать некоторые элементы отключенными: "noreferrer">https://plnkr.co/edit/uhsn4lmzssi6rrijPEAp?p=preview

 <select ng-model="ddl.selected"
    ng-options="item.id as item.text group by item.groupName disable when item.enabled===false for item in ddl.items"></select>
person Shafqat Ali    schedule 04.05.2016

Я искал тот же вопрос и нашел лучший ответ. Можно использовать функцию для возврата данных по мере необходимости, как в запросе ниже 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

person malibeg    schedule 31.01.2015