我正在使用 UI-Select(select2 主题)和一组数据,这些数据以以下形式返回:
Array of Objects [
0: Object {
category: "Category name, to be used as optgroup label",
options: [
0: Object {
id: 5,
name: "Some name, to be used as an option under the above optgroup",
}
1: Object {
id: 6,
name: "Some name, to be used as an option under the above optgroup",
}
2: Object {
id: 7,
name: "Some name, to be used as an option under the above optgroup",
}
]
}
1: Object {
category: "Another category name, to be used as second optgroup label",
options: [
0: Object {
id: 44,
name: "Some name, to be used as an option under the above optgroup",
}
1: Object {
id: 45,
name: "Some name, to be used as an option under the above optgroup",
}
2: Object {
id: 47,
name: "Some name, to be used as an option under the above optgroup",
}
]
}
]
我创建 optgroup 的功能:
$scope.createOptGroups = function(item){
return item.category;
};
它确实正确地创建了我的 optgroups。
这里的问题如下。为了能够创建 optgroups,我需要处于此级别:
<ui-select multiple ng-model="diseaseObject.chosenDiseases.states">
<ui-select-match placeholder="Start typing disease name or click in the box...">{{$item}}</ui-select-match>
<ui-select-choices
group-by="createOptGroups"
repeat="state in diseaseObject.allStates | filter: $select.search track by $index">
{{state}}
</ui-select-choices>
</ui-select>
如果您想知道这段代码的结果是什么,请看这张图片:http ://screencast.com/t/S2VBuK1jXtA
所以很明显数据在那里,但需要缩小到所需的 diseaseName 属性。但是...如果我这样做,我将失去 optgroups!我将不再处于category
可用财产的水平。另一个想法是缩小范围state
:state.options
. 但是该值仍然是一个需要对其自身进行迭代的对象数组。但是,如果有一个选项可以为实际选项实现另一个转发器(旨在实现类似的东西<span ng-repeat="name in state.options">{{name}}</span>
- 那会做到这一点。我已经尝试过,但指令(ui-select)不喜欢它。
他们有这个group-by
东西的官方演示,但在这种特殊情况下,该函数只是将 optgroups 创建为自定义字符串(字母跨度),这与我的问题完全不同。
请参阅最底部的示例:http ://plnkr.co/edit/juqoNOt1z1Gb349XabQ2?p=preview