Угловой отбор и нг-опции

У меня есть этот угловой выбор:

<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 обновляется до "300" или "100" или чего-либо еще, когда я меняю свой выбор, но дисплей выбора всегда пуст. Таким образом, модель обновляется до выбранного значения выбранного входа, но на входе не отображается текущее выбранное значение, а отображается пустой элемент.

Если я изменю ng-параметры, чтобы быть ng-options='status as (status.code ...' это работает, но я хочу только status.code в моей модели, а не весь массив status. Что дает?

я имею {{obj | json }} в моем HTML, и это гласит:

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

2 ответа

Решение

Удалить трек по.

Из документов:

Будьте внимательны при использовании select as и track by в одном выражении.

Мое лучшее предположение заключается в том, что as использует нормальное значение, например "300", но для отслеживания используется типизированное значение, например "int:300". Удаление того или другого должно сделать это, желательно трек.

Они приводят это в качестве примера:

Это будет работать:

<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>

Согласно документации здесь: 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 должен использоваться, когда у вас есть объект в качестве значения в модели, массив объектов для опций и вы хотите сопоставить текущее значение модели с одним из объектов в массиве.

Другие вопросы по тегам