6

我有这个结构:

model = [
{
  name: 'name1',
  items: [
    {
      name: 'subobj1'
    },
    {
      name: 'subobj2'
    }]
}, 
{
  name: 'name2',
  items: [
    {
      name: 'subobj1'
    },
    {
      name: 'subobj2'
    }]
}, 
    .... 
]

问题是:我如何编写 ngOptions attrbiute 来像这样输出这个对象?:

<select>
    <optgroup label="name1">
      <label>subobj1</label>
      <label>subobj2></label>
    </optgroup>
    ....
</group>

此外 - ngRepeat 不是一个选项。我必须单独执行此 ngOptions 才能使插件正常工作。

4

2 回答 2

8

ngOptions不支持多维数组。您必须先展平阵列。

在这个答案中阅读更多内容。

我使用了一个过滤器:

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>
于 2014-01-20T09:12:02.987 回答
1
<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>

您可以style="font-weight: bold;"在第一个选项(顺便说一下,这是组标签)上添加类似的内容style="padding-left: 15px;",在第二个选项行上添加类似的内容,这是对所有第一个选项行的另一个重复。所以基本上通过这样做,您只需将 2 个级别(没有optgroup标签,请注意)添加到您的选择中。

于 2016-03-14T21:10:12.757 回答