こんにちは、Ryohei(@ityryohei)です!

本記事では連動するセレクトボックスの実装方法をご紹介しています。

Vue.jsで複数のセレクトボックスを連動させたいんだけど、良い方法ないかな?

上記の疑問にお答えします。

では、解説していきます。

連動するセレクトボックスとは

連動するセレクトボックスとは、セレクトボックスAで指定された値によってセレクトボックスBの選択肢を動的に切り替える処理のことです。ページ上の表示では下記デモをのような処理内容になります。

See the Pen Link Selectbox | Vue.js by ryohei (@intotheprogram) on CodePen.

上記デモ内の上段にあるセレクトボックスを選択した後、下段にあるセレクトボックスを開いてみてください。選択できる値が変わっているはずです。

デモの内容ですと、上のセレクトボックスでToyotaを選択すると、下のセレクトボックスにToyotaの車種が、Hondaを選択するとHondaの車種が表示されます。

連動するセレクトボックスの実装方法は色々あるかと思いますが、本記事ではHTML側ではなくVueのdataでセレクトボックスのオプションアイテムを記述し、HTMLでループで表示する方法をご紹介しています。

Vue.jsでスクリプトを作成する

まずはスクリプトを作成していきます。冒頭でも触れましたが、本記事ではVueのdataにセレクトボックスのオプションを持たせています。メソッドは上のセレクトボックスで選択されたキーによってselectedItemに値を代入しています。

JS

var app = new Vue({
    el: '#app',
    data: {
        selectedKey: '',
        selectedItem:'',
        items: {
            Toyota: [
                { name: 'Aqua' },
                { name: 'Prius' },
                { name: 'Collora' },
                { name: 'Vitz' },
                { name: 'Crown' },
            ],
            Honda: [
                { name: 'N-BOX' },
                { name: 'Freed' },
                { name: 'VEZEL' },
                { name: 'N-WGN' },
                { name: 'Fit' },
            ],
        }
    },
    methods:{
        selected: function(){
            this.selectedItem = this.items[this.selectedKey];
        }
    }
});

以上でVue側の準備は完了です。続いてVueのdataを使って、HTMLでセレクトボックスを作成します。

HTMLでレイアウトを作成する

HTMLでは、上記で作成したスクリプトのitemsのキーを上段のセレクトボックスに、バリューを下段のセレクトボックスに出力しています。上段のセレクトボックスで選択されたキーによって、下段のセレクトボックスの値を切り替えるようします。

HTML

<div id="app">
    <select v-model="selectedKey" v-on:change="selected">
        <option v-for="(value, key) in items">
            {{ key }}
        </option>
    </select>
    
    <select>
        <option v-if="selectedItem" v-for="item in selectedItem">
            {{ item.name }}
        </option>
    </select>
    <button>Submit!</button>
</div>

以上でHTMLレイアウトの作成は完了です。本記事の内容を実装すると、冒頭でご紹介したデモの内容を実現することができます。

最後に

連動するセレクトボックスは検索条件の指定や複雑なフォームを作成しる際に役に立つかと思います。

本記事でご紹介した内容をそのまま使用されることはないと思いますので、カスタマイズしてご活用いただければ幸いです!

以上、Vue.jsで連動するセレクトボックスの実装方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。