[解決済み】AngularJSのng-optionsでselectを操作する。
質問
他の記事でも読んだのですが、分かりませんでした。
配列を持っています。
$scope.items = [
{ID: '000001', Title: 'Chicago'},
{ID: '000002', Title: 'New York'},
{ID: '000003', Title: 'Washington'},
];
としてレンダリングしたい。
<select>
<option value="000001">Chicago</option>
<option value="000002">New York</option>
<option value="000003">Washington</option>
</select>
また、ID=000002のオプションを選択したい。
私は、以下を読みました。 選択 とやってみたのですが、解りません。
どのように解決するのですか?
一つ注意すべきは、ngModelが
必須
が動作するようにします。
ng-model="blah"
これは "set $scope.blah to selected value" と言っているのです。
これを試してみてください。
<select ng-model="blah" ng-options="item.ID as item.Title for item in items"></select>
AngularJSのドキュメントからさらに引用します(まだご覧になっていない方はこちら)。
<ブロッククオートは、配列データソース用です。
- 配列中の値のラベル
- 配列中の値のラベルとして選択する
- label group by group for value in array = select as label group by group for value in array.
オブジェクト・データ・ソースの場合。
- オブジェクトの (キー , 値) に対応するラベル
- オブジェクトの (キー , 値) のラベルとして選択します。
- ラベル group by group for (key, value) in object
- ラベルとして選択する グループによるグループ for (キー, 値) in オブジェクト
AngularJSのoptionタグの値についての説明です。
を使用する場合
ng-options
,
ng-optionsによって書き出されるオプションタグの値は、常にそのオプションタグが関連する配列アイテムのインデックスとなります。
. これは、AngularJSでは実際にプリミティブ型だけでなく、セレクトコントロールでオブジェクト全体を選択することができるからです。例えば
app.controller('MainCtrl', function($scope) {
$scope.items = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 3, name: 'blah' }
];
});
<div ng-controller="MainCtrl">
<select ng-model="selectedItem" ng-options="item as item.name for item in items"></select>
<pre>{{selectedItem | json}}</pre>
</div>
上記により、オブジェクト全体を選択し
$scope.selectedItem
を直接指定することができます。
重要なのは、AngularJSではoptionタグの中身を気にする必要がないということです。AngularJSに任せて、あなたはスコープ内のモデルにあるものだけを気にすればいいのです。
以下は、上記の動作を示すプランカーと、書き出されたHTMLを示したものです。
デフォルトのオプションに対応する。
デフォルトのオプションに関連して、上で言いそびれたことがいくつかあります。
最初の選択肢を選択し、空の選択肢を削除する。
これを行うには、単純な
ng-init
を設定し、モデル (
ng-model
で繰り返される項目の最初の要素に設定します。
ng-options
:
<select ng-init="foo = foo || items[0]" ng-model="foo" ng-options="item as item.name for item in items"></select>
注:これは、もし
foo
が適切に初期化されていない場合、quot;falsy" が発生する可能性があります。このような場合、次のような初期化を行う必要があります。
foo
をコントローラで使用します。
デフォルトのオプションをカスタマイズする。
ここでは、selectの子としてoptionタグを追加し、value属性を空にして、その内側のテキストをカスタマイズすればよいのです。
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="">Nothing selected</option>
</select>
注意: この場合、"empty" オプションは、別のオプションを選択した後でもそこに留まることになります。これは、AngularJSでのselectsのデフォルトの動作とは異なります。
カスタマイズされたデフォルトのオプションで、選択が行われた後に非表示になります。
カスタマイズしたデフォルトのオプションが、値を選択した後に消えるようにしたかったら、デフォルトのオプションにng-hide属性を追加します。
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="" ng-if="foo">Select something to remove me.</option>
</select>
関連
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
-
[解決済み] How can I set the default value for an HTML <select> element?
-
[解決済み] jQueryでJavaScriptオブジェクトから選択する際に、オプションを追加する最も良い方法は何ですか?
-
[解決済み] セレクトボックスのオプションをすべて削除してから、オプションを1つ追加して、jQueryで選択するにはどうすればよいですか?
-
[解決済み] Adding options to a <select> using jQuery?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】BootstrapのCollapseが折りたたまれない
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み】中央値の計算 - javascript
-
[解決済み] AngularJSのng-optionsでvalueプロパティを設定するには?