AngularJs-ng-модель в SELECT
:
у меня есть SELECT-элемент на моей странице, который заполняется ng-repeat
. Он также имеет ng-model
, который имеет значение по умолчанию.
когда я изменяю значение,ng-model
адаптируется, все в порядке. Но выпадающий список показывает пустой слот при запуске, где вместо него должен быть выбран элемент со значением по умолчанию.
код
<div ng-app ng-controller="myCtrl">
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit">
<option ng-repeat="item in units" ng-value="item.id">{{item.label}}</option>
</select>
</div>
С JS:
function myCtrl ($scope) {
$scope.units = [
{'id': 10, 'label': 'test1'},
{'id': 27, 'label': 'test2'},
{'id': 39, 'label': 'test3'},
]
$scope.data = {
'id': 1,
'unit': 27
}
};
6 ответов
можно использовать ng-selected указание на элементы. Он принимает выражение, что если truthy установит выбранное свойство.
В этом случае:
<option ng-selected="data.unit == item.id"
ng-repeat="item in units"
ng-value="item.id">{{item.label}}</option>
демо
angular.module("app",[]).controller("myCtrl",function($scope) {
$scope.units = [
{'id': 10, 'label': 'test1'},
{'id': 27, 'label': 'test2'},
{'id': 39, 'label': 'test3'},
]
$scope.data = {
'id': 1,
'unit': 27
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit">
<option ng-selected="data.unit == item.id" ng-repeat="item in units" ng-value="item.id">{{item.label}}</option>
</select>
</div>
попробовать следующий код :
в вашем контроллере :
function myCtrl ($scope) {
$scope.units = [
{'id': 10, 'label': 'test1'},
{'id': 27, 'label': 'test2'},
{'id': 39, 'label': 'test3'},
];
$scope.data= $scope.units[0]; // Set by default the value "test1"
};
на странице :
<select ng-model="data" ng-options="opt as opt.label for opt in units ">
</select>
вам не нужно определять теги опций, вы можете сделать это с помощью директивы ngOptions:https://docs.angularjs.org/api/ng/directive/ngOptions
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit" ng-options="unit.id as unit.label for unit in units"></select>
однако ngOptions предоставляет некоторые преимущества, такие как уменьшение памяти и увеличение скорости, не создавая новую область для каждого повторяющегося экземпляра. угловое документы
альтернативным решением является использование
вы также можете поместить элемент со значением по умолчанию, выбранным из ng-repeat, как следовать:
<div ng-app="app" ng-controller="myCtrl">
<select class="form-control" ng-change="unitChanged()" ng-model="data.unit">
<option value="yourDefaultValue">Default one</option>
<option ng-selected="data.unit == item.id" ng-repeat="item in units" ng-value="item.id">{{item.label}}</option>
</select>
</div>
и не забудьте значение atribute если вы оставите его пустым, у вас будет та же проблема.
значение по умолчанию Select должно быть одним из его значений в списке. Чтобы загрузить select со значением по умолчанию, вы можете использовать ng-options. Переменная области должна быть установлена в контроллере, и эта переменная назначается как ng-model в теге выбора HTML.
просмотр этого планкера для любых ссылок: