Как установить значение по умолчанию в 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};
значение модели должно совпадать с ключом, значением пары в месте назначения.