角度选择和ng选项

时间:2015-12-14 16:14:30

标签: javascript angularjs angularjs-ng-options angularjs-track-by

我有这个角度选择:

<select ng-model='obj.status' ng-options='status.code as (status.code + " " + status.phrase) for status in status_codes.data track by status.code'>`

我的$scope.status_codes是这样的:

data: [
{
       "code":"100",
       "phrase":"...",
       "spec_title":"RFC7231#6.2",
       "spec_href":"http://tools.ietf.org/html/rfc7231#section-6.2"
}
...
]

我的$scope.obj.status已更新为&#34; 300&#34;或&#34; 100&#34;或者我更改选择的任何内容,但选择的显示始终为空白。因此,模型更新为选择输入的选定值,但输入未显示当前选定的值,它显示空白项。

如果我将ng-options更改为ng-options='status as (status.code ...'它可以正常工作,但我只想在我的模型中使用status.code,而不是整个状态数组。是什么给了什么?

我的HTML中有{{obj | json }},内容为:

obj = {
  "name": "",
  "description": "",
  "payload": "",
  "status": "200",
  "responseHeaders": {
    "entry": [
      {
        "key": "",
        "value": ""
      },
      {
        "key": "",
        "value": ""
      }
    ]
  }
}

2 个答案:

答案 0 :(得分:6)

删除曲目。

来自Docs

  

在同一表达式中使用select as和track by时要小心。

我最好的猜测是as使用正常值,例如&#34; 300&#34;,但是track by使用的是类型值,例如&#34; int:300&#34;。删除一个或另一个应该这样做,最好是轨道。

他们以此为例:

  

这将有效:

<select ng-options="item as item.label for item in items track by item.id" ng-model="selected"></select>
  

但这不起作用:

<select ng-options="item.subItem as item.label for item in items track by item.id" ng-model="selected"></select>

答案 1 :(得分:1)

根据这里的文档:https://docs.angularjs.org/api/ng/directive/ngOptions

select as label for value in array

因此,在您的示例中,这应该可行(您将获取代码值作为模型中的选择值):

status.code as (status.code + " " + status.phrase) for status in status_codes.data
当对象作为模型中的值,选项的对象数组以及您希望将当前模型值与数组中的某个对象匹配时,应使用

track by