LoginSignup
1
2

More than 5 years have passed since last update.

AngularJSで 連動するSelectタグを作成する

Last updated at Posted at 2016-02-09

大項目と詳細が定義されたJsonを用いる前提で、ユーザーの大項目の選択によって、詳細の内容を変更したい場合。
また、UIはSelectボックスを想定しています。

data.js
$data = [{
    top_key: 't1',
    top_label: '大項目1',
    details: [
        { key: 'd1', label: '大項目1の詳細1' },
        { key: 'd2', label: '大項目1の詳細2' }
    ]
},
{
    top_key: 't2',
    top_lebel: '大項目2',
    details: [
        { key: 'd3', label: '大項目2の詳細1' },
        { key: 'd4', label: '大項目2の詳細2'}
    ]
}];

filterでなんとかなったりします。

sample.html
<div class="top">
    <select ng-model="top"
        ng-options="t.top_key as t.top_label for t in data"></select>
</div>
<div class="detail">
    <select ng-model="detail"
        ng-options="d.key as d.label for d in (data | filter:{top_key:top})[0].details"></select>
</div>

処理の流れとしては

  • $dataに関して、top_keyプロパティの値でfilterして、それぞれに対応するdetails配列を取得
  • あとはそのコレクションで普通にselectを表示してあげる

ただ、arrayをfilterした結果はarrayなので、unwrapするために[0]でアクセスしているのがかっこ悪い。また、ng-modelの初期値には気をつける必要があるので、もっとかっこいい方法を知っている方がいたら教えて下さいm m

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2