ng-options

时间:2016-12-19 18:48:13

标签: javascript angularjs json

我希望输入选择元素填充"面板"来自 JSON-object数组,使用ng-options。在这样的面板中,我有几个属性,其中一个属于这样一个面板所属的类别。它还包含名称和组的列表。是的,在这种情况下,类别和组是两个不同的东西。

当我应用过滤器时,我收到infdig-error。

互联网上的研究告诉我,过滤器的内容正在发生变化,这就是错误的原因。当我使用ng-repeat对象时,过滤器确实有效。但是,通过这种方式,与面板关联的名称将显示为数组,而不是以逗号分隔的名称,并且页面也不会相应地更新。

使用ng-options

的代码
<select class="form-control" ng-model="selectPanel" ng-click="ChangeForm()" ng-options="'(' + panel.group + ') ' + panel.names + ' [' + panel.category + ']' for panel in panels track by panel.id | filter:{category:pageCategory}">
<option value="">Select panel</option>

使用ng-repeat的代码

<select class="form-control" ng-model="selectPanel" ng-click="ChangeForm()">
                        <option value="">Select panel</option>
                        <option ng-repeat="panel in panels | filter:{category:pageCategory}" value="panel.id">{{panel.names}}</option>
                    </select>

JSON-object示例

{
        "id":"01",
        "category":"RD",
        "group":"A",
        "room": "1.00",
        "names": [
            "Bob",
            "Jamie",
            "Bill"
        ]
    }

我想过滤面板,因为页面只包含单个类别的信息,但JSON数据包含所有类别。有没有办法避免ng-options中的infdig-error或者在使用ng-repeat时更新页面?

1 个答案:

答案 0 :(得分:0)

ng-repeat解决方案打印数组对象的原因是因为您要告诉它打印数组对象。您需要告诉angular在panel.names中打印每个名称。

所以添加另一个ng-repeat: <span ng-repeat="name in panel.names">{{name}},</span>

请注意,这将留下逗号。

至于ng-options解决方案,并不完全确定导致infdig-error的原因,但你似乎错过了语法的as部分。