2016-09-28 8 views
1

У меня есть следующие Object в TypeScript определении некоторых вариантов в <select> с помощью ng-options:ngOptions с использованием основного выражения обеспечивая нечетное вынесенное значение

$scope.sOptions = [ 
    { 
     name: "Female" 
    }, 
    { 
     name: "Male" 
    }]; 

я предоставить следующий за ng-options к AngularJS:

ng-options="opt.name for opt in sOptions"

Это фактически работает, за исключением того факта, что согласно документации для ng-option, value должен быть просто счетчиком циклов при построении элементов <option>. Однако я вижу следующие визуализации:

<option value="?" selected="selected"></option> 
<option label="Female" value="object:6">Female</option> 
<option label="Male" value="object:7">Male</option> 

Что я ожидал увидеть что-то вроде следующего:

<option value="0" selected="selected"></option> 
<option label="Female" value="1">Female</option> 
<option label="Male" value="2">Male</option> 

Что я делаю неправильно, чтобы эти нечетные значения производятся для value из элемент <option>?

EDIT: После прочтения правильного ответа при условии, этот другой пост идет в подробность о подобной проблеме, а также как использовать track by для этого требования: https://stackoverflow.com/a/30292209/410937

+0

Это происходит потому, что ваш выбранный список i s массив объектов, а не массив примитивов. Есть несколько путей решения этой проблемы, но самым прямым путем было бы предоставление массива строк, если вам не нужны другие значения в этом объекте, которые вы не показываете. – Claies

ответ

1

Для достижения этого требования вы должны использовать track by в ng-select. Трек поможет вам привязать опцию select с тегом значений. Вы также должны указать поле Unique Id для отслеживания выбора.

<select ng-model="selectedName" ng-options="item.Name for item in names track by item.Id"> 
</select> 

В контроллере названия объекта будет как этот

$scope.names = [{Name: "Name1", Id: 0}, {Name: "Name2", Id: 1}, {Name: "Name3", Id: 2}]; 

Для того, чтобы инициализировать выбора опции можно установить модель,

$scope.selectedName = $scope.names[0]; 

Вы можете инициализировать переменную области видимости только если вы используете дорожку по свойству в опции выбора

+0

Это сделало это! Использование 'track by' и наличие' id' в коллекции для каждого элемента привело к желаемому результату: '' – atconway

+0

Да, использование трека по методу, предложенному Угловым для ng-select. Это тоже лучшая практика. – Nitheesh

0

Это происходит потому, что вы не использовали ng-model в выбранном вами атрибуте. Угловое делает это для предотвращения случайного выбора модели. Вам нужно привязать ваш выбор, и «пустой» вариант исчезнет.

<select ng-options="opt.name for opt in sOptions" 
    ng-model="someScopeVar"> 
</select> 
+1

кажется правильным с первого взгляда, но 'ng-options' не будет генерировать список вообще без' ng-model'. Кроме того, вопрос заключается не в значении '?', а в значении 'object: 6' вместо' 1'. – Claies

+0

Да, к сожалению, это не было ответом или не оказало никакого влияния на результат. У меня не было этого в моем OP, но атрибут 'ng-model' уже был определен. – atconway

 Смежные вопросы

  • Нет связанных вопросов^_^