Javascript ngOptions两级对象显示
我有这样的结构:Javascript ngOptions两级对象显示,javascript,html,angularjs,ng-options,Javascript,Html,Angularjs,Ng Options,我有这样的结构: model = [ { name: 'name1', items: [ { name: 'subobj1' }, { name: 'subobj2' }] }, { name: 'name2', items: [ { name: 'subobj1' }, { name: 'subobj2' }] }, .... ] 问题是:如何编写ng
model = [
{
name: 'name1',
items: [
{
name: 'subobj1'
},
{
name: 'subobj2'
}]
},
{
name: 'name2',
items: [
{
name: 'subobj1'
},
{
name: 'subobj2'
}]
},
....
]
问题是:如何编写ngOptions属性以这样输出此对象
<select>
<optgroup label="name1">
<label>subobj1</label>
<label>subobj2></label>
</optgroup>
....
</group>
子对象1
子对象2>
....
另外-ngRepeat不是一个选项。我必须单独使用ngOptions才能让插件正常工作。
ngOptions
不支持多维数组。您必须首先展平阵列
阅读更多信息
我使用了一个过滤器:
以及标记:
您可以在第一个选项(顺便说一下,这是组标签)上添加类似于style=“font-weight:bold;”“
,在第二个选项行添加类似于style=“padding left:15px;”“
的内容,这是所有第一个选项行的另一个重复。
因此,基本上通过这样做,您只需在您的选择中添加两个级别(请注意,不带
optgroup
标记)。您尝试过什么吗?到目前为止,我得到的最接近的结果是:“模型中b的b.items按b.name分组”。但是,它不会迭代内部对象,只将其作为CSV进行分析。请解释您的答案,特别是当你为一个已经被接受了一年多的问题添加答案时。
app.filter('flatten' , function(){
return function(array){
return array.reduce(function(flatten, group){
group.items.forEach(function(item){
flatten.push({ group: group.name , name: item.name})
})
return flatten;
},[]);
}
})
<select ng-model="select"
ng-options="item.name
group by item.group
for item in model | flatten"></select>
<select>
<option ng-repeat-start="m in model" ng-bind="m.name"></option>
<option ng-repeat-end ng-repeat="item in m.items" ng-bind="item.name"></option>
</select>