I am looking to populate select option with values from a basic json array.
The example I have is a country select. Each country has an id element and a name plus other
angular.module('ui.bootstrap.demo', ['ui.bootstrap'])
- be sure you have ui.bootstrap. Read how to install it http://angular-ui.github.io/bootstrap/In this above example you are missing value
attribute change this value="{{country.countryId}}"
. try this
<select id="Country" name="Country" class="form-control" size="10" ng-model ="chooseCountries">
<option ng:repeat="country in chooseCountries" value="{{country.countryId}}">
{{country.name}}
</option>
</select>
and see the example click here
The best way to populate a standard select(you can use angular-ui-select too) with objects is to use "ng-options" directive and "ng-repeat" using "track by id" (see AngularJS doc), this works well with ng-model. This is an example of how to use it:
<select id="select_field" name="select_field"
ng-model="vm.selectedCountry"
ng-options="country as country.name for country in vm.chooseCountries track by country.countryId">
<option value="">-- Select Country --</option>
</select>
I must say that "vm" is in case of "controllerAs" defined in the controller, if you use the $scope directly, you can remove the "vm".
This is the best way that I found to populate a select field.
You miss-typed the value
attribute, change it to country.countryId
.
Also, set ng-model
directive to a single countryId value (or array of country IDs) instead of the full object.
<select id="Country" name="Country" ng-model ="selectedValue">
<option ng:repeat="country in chooseCountries" value="{{country.countryId}}">
...
JS:
function DemoSelectCtrl($scope) {
$scope.selectedValue = 1;
$scope.chooseCountries=[
{countryId : 1, name : "France - Mainland", desc: "some description" },
{countryId : 3, name : "Gibraltar", desc: "some description"},
{countryId : 3, name : "Malta", desc: "some description"}
];
});