Как установить значение по умолчанию в ng-options

Я могу установить раскрывающийся список со значением по умолчанию в angularjs как,

 <select name="repeatSelect" id="repeatSelect" ng-model="repeatSelect" ng-init=" repeatSelect = data[0].id">
    <option ng-repeat="option in data" value="{{option.id}}">{{option.name}}</option>
 </select>

Как я могу добиться того же, используя ng-options? Я стараюсь,

 <select name="repeatSelect" 
   id="repeatSelect" 
   ng-model="repeatSelect"
   ng-init=" repeatSelect = option.id"  
   ng-options="option.name for option in data track by option.id">
</select>

Но бесполезно. Пример скрипка здесь

Ответ 1

Используйте ng-init для установки значения по умолчанию для ng-options.

Вот: демонстрация

<select name="repeatSelect" 
   id="repeatSelect" 
   ng-model="repeatSelect"
   ng-init=" repeatSelect = data[0].id"  
   ng-options="option.id as option.name for option in data">          
</select>

Ответ 2

Все это пропускает использование ng-init.

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

В этой директиве можно злоупотреблять, добавляя лишние объемы логики в ваши шаблоны. Существует только несколько подходящих применений ngInit, например, для наложения специальных свойств ngRepeat, как показано в демонстрации ниже; и для ввода данных через серверные скрипты. Помимо этих нескольких случаев, вы должны использовать контроллеры вместо ngInit для инициализации значений в области.

Исходные документы

На мой взгляд, правильным способом установить значение по умолчанию является просто предварительное заполнение вашего свойства ng-model значением, выбранным из вашего ng-options, angular. Остальные.

По существу, если вы определяете свойство $scope, которое ваш выбор свяжет, чтобы присвоить ему значение по умолчанию из вашего массива data. Если ваш массив data находится из запроса ajax, просто назначьте его, если у вас есть data.

.controller('test', ['$scope', function ($scope) {
    $scope.data = [{name: 'one', id: 1}, {name: 'two', id: 2},{name: 'three', id: 3}];
    $scope.repeatSelect= $scope.data[0];
}]);

Следует отметить одно замечание. Если вы используете ключевое слово as в своем выражении, вы должны назначить свой ng-model фактическим свойством, которое вы укажете ему, чтобы выбрать.

Смотрите полную демонстрацию скриптов: http://jsfiddle.net/kb99gee8/

Ответ 3

Я получил то, что вам нужно, используя ваш код и ng-options, как вы упомянули, здесь Working Fiddle

Полный код

<div ng-app="ngrepeatSelect">
    <div ng-controller="ExampleController">
        <form name="myForm">
            <label for="repeatSelect">Angular select:</label>
            <select name="repeatSelect" 
   id="repeatSelect" 
   ng-model="repeatSelect"
   ng-init=" repeatSelect = data[0]"  
   ng-options="option.name for option in data track by option.id">
</select>
        </form>
        <br/> <tt>Selected value: {{repeatSelect.id}}</tt>

    </div>
</div>
<br/>

Ответ 4

Я приведу пример Часть HTML

<select class="form-control" ng-model="data.selectedOption" required ng-options="option.name as option.name for option in venueNamelists"  ng-change="getmediationRooms(data.selectedOption)"></select>

В моем контроллере

$scope.data = {selectedOption: $scope.venueNamelists [i].name};

значение модели должно совпадать с ключом, значением пары в месте назначения.