基本的なjson配列からの値をselectオプションに入力しようとしています。
私が持っている例は国の選択です。各国には、id要素と名前に加えて、無視できる他のフィールドがあります。基本的に、1つの値をvalue=""
フィールドに入れ、別の値を<option>tags</option>
の間に入れます。
htmlスニペット
<div ng-controller="DemoCtrl">
<p>populate select options with ajax</p>
<select id="Country" name="Country" class="form-control" size="10"
ng-model ="chooseCountries">
<option ng:repeat="country in chooseCountries" value="{{country.id}}">
{{country.name}}
</option>
</select>
</div>
javascriptスニペット
'use strict';
function DemoSelectCtrl($scope) {
$scope.chooseCountries=[
{countryId : 1, name : "France - Mainland", desc: "some description" },
{countryId : 3, name : "Gibraltar", desc: "some description"},
{countryId : 3, name : "Malta", desc: "some description"}
];
});
ここにまとめましたjs fiddle..何かが足りないと思います
angular.module('ui.bootstrap.demo', ['ui.bootstrap'])
- ui.bootstrapがあることを確認してください。インストール方法を読む http://angular-ui.github.io/bootstrap/value
属性の入力を間違えたため、country.countryId
に変更してください。
また、ng-model
ディレクティブを、オブジェクト全体ではなく、単一のcountryId値(または国IDの配列)に設定します。
<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"}
];
});
上記の例では、value
属性が欠落しています。これを変更してくださいvalue="{{country.countryId}}"
。これを試して
<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>
例を参照してください ここをクリック
標準のselect( angular-ui-select も使用できます)にオブジェクトを設定する最良の方法は、「ng-options」ディレクティブと「trackbyid」を使用した「ng-repeat」を使用することです( AngularJS docを参照 )、これはng-modelでうまく機能します。これはそれを使用する方法の例です:
<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>
「vm」はコントローラーで定義された「controllerAs」の場合であると言わなければなりません。$ scopeを直接使用すると、「vm」を削除できます。
これは、選択フィールドに入力するために私が見つけた最良の方法です。