AngularJS - Выбор значения возвращает "? Число: x?" из переменной сферы

Попытка получить начальное значение для элемента select и вместо заполнения значения добавляет странную строку, как показано на этом изображении:

enter image description here

Вот код JavaScript:

 function appCtrl($scope){
        $scope.teams = [
            {teamId: 10, teamName: 'Foo'},
            {teamId: 20, teamName: 'Bar'},
            {teamId: 30, teamName: 'Steve'},
            {teamId: 40, teamName: 'Jobs'},
            {teamId: 50, teamName: 'Macs'}
        ];

        $scope.filters = {
            teamIdSelected: 20
        };
  }

Вот HTML:

<div ng-app ng-controller="appCtrl"> 
    <select class="small" ng-model="filters.teamIdSelected">
        <option ng-repeat="team in teams" value="{{team.teamId}}">{{team.teamName}}</option>
    </select>

Вот jsbin, чтобы продемонстрировать: http://jsbin.com/EKOpAFI/1/edit

Я также попытался использовать невероятно плохо документированный элемент select здесь, но я не могу заставить его работать таким образом, где моя командаId является значение, а имя команды - это метка. Он всегда хочет поместить индекс массива в значение.

Любая помощь будет принята с благодарностью.

Ответы

Ответ 1

Директива

select действительно немного сложна. Здесь, как это работает в сочетании с директивой ng-options (что удивительно мощно!)

<select 
  ng-model="filters.teamIdSelected"
  ng-options="value.teamId as value.teamName for (key, value) in teams"
  ></select>

Не путайте значения, сгенерированные в DOM, при проверке параметров выбора с помощью инструментов dev. Атрибут value всегда получает свой индекс. Соответствующие пары ключевых значений по-прежнему оцениваются по областям видимости, поэтому вам нужно обновить'ng-model`.

Надеюсь, это поможет!

Ответ 2

Я рекомендую вместо этого использовать ng-options в элементе select:

    <select class="small" ng-model="filters.teamIdSelected" ng-options="team.teamId as team.teamName for team in teams"></select>

Кроме того, если вы хотите включить опцию "Выбрать команду":

<select class="small" ng-model="filters.teamIdSelected" ng-options="team.teamId as team.teamName for team in teams">
  <option value="">Select Team</options>      
</select>

Ответ 3

Это то, что вы хотите:

<select class="small" ng-model="filters.teamIdSelected"
    ng-options="t.teamId as t.teamName for t in teams">
</select>

Не используйте ng-repeat с <option> s.