【Vue.js】v-modelとは?使い方をサンプルコードで解説

手っ取り早くこのページのサンプルコードを検証するには、下記のvueライブラリを事前に読み込んでおいてください。

v-modelとは

v-modelとは、vue.jsの機能で、data変数とフォームの値を連動させることが出来ます。

例えば、data変数「hoge」をテキストボックスに紐づけた場合、テキストボックスの値を入力すると、変数も変更されます。

逆も然りで、変数をプログラム上で変更させると、フォームの入力内容も変更されます。

vue.jsの特徴である「双方向データバインディング」と呼ばれるものですね。

jQueryなどのように、変数とフォームを都度代入し合わなくてもデータが容易に連携できるようになります。

テキストボックス

テキストボックスのv-modelの設定の一例です。

サンプルコード
<div id="app-1">
    <!-- テキストボックスの値を書き換えると、変数も書き換わる -->
    <input type="text" v-model="textsample">
    <p>textsampleの値は「{{ textsample }}」です。</p>
    
    <!-- プログラム上で変数を書き換えると、↑のフォームの値も変わる -->
    <input type="button" value="fugaに置き換え" @click="textsample = 'fuga'" style="margin-top:50px"></button>
</div>

<script>
new Vue({
    el: '#app-1',
    data: {
        textsample : 'hoge',
    }
});
</script>

textsampleの値は「{{ textsample }}」です。

テキストエリア

テキストボックスとほぼ同じですが、テキストエリアのv-model設定例も残しておきます。

サンプルコード
<div id="app-2">
    <!-- テキストボックスの値を書き換えると、変数も書き換わる -->
    <textarea v-model="textareasample">
        
    </textarea>
    <p>textareasampleの値は「{{ textareasample }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-2',
    data: {
        textareasample : 'hoge',
    }
});
</script>

textareasampleの値は「{{ textareasample }}」です。

セレクトボックス

通常版

セレクトボックスもv-modelで紐付けることが出来ます。

セレクトボックスの値はoptionで選択されている値(value)と連動します。

サンプルコード
<div id="app-3">
    <select v-model="selectsample">
        <option value="hoge">hoge</option>
        <option value="fuga">fuga</option>
        <option value="piyo">piyo</option>
    </select>
    <p>selectsampleの値は「{{ selectsample }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-3',
    data: {
        selectsample : 'hoge',
    }
});
</script>

selectsampleの値は「{{ selectsample }}」です。

配列版

セレクトボックスの値を配列に代入したパターンも、このようにv-modelを設定できます。

v-forを使用して、セレクトボックスの値を配列で管理しているため、値の管理が容易ですね。

サンプルコード
<div id="app-4">
    <select v-model="selectsample">
        <option v-for="(val, key) in selectlistAry" v-bind:value="val">{{ val }}</option>
    </select>
    <p>selectsampleの値は「{{ selectsample }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-4',
    data: {
        selectlistAry : ['hoge', 'fuga', 'piyo'],
        selectsample : 'hoge',
    }
});
</script>

selectsampleの値は「{{ selectsample }}」です。

チェックボックス

単一版

チェックボックスもv-modelで連動させることが出来ますが、単体のチェックボックスの値はboolen型(true・false)となります。

サンプルコード
<div id="app-5">
    <input type="checkbox" v-model="checksample" id="check1" /> <label for="check1">チェックする</label>
    <p>checksampleの値は「{{ checksample }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-5',
    data: {
        checksample : false,
    }
});
</script>

checksampleの値は「{{ checksample }}」です。

複数版(通常)

複数のチェックボックスの場合は、同じv-modelを指定して、それぞれに対応した配列で連動します。

サンプルコード
<div id="app-6">
    <input type="checkbox" v-model="checksampleAry" value="hoge" /> hoge
    <input type="checkbox" v-model="checksampleAry" value="fuga" /> fuga
    <input type="checkbox" v-model="checksampleAry" value="piyo" /> piyo
    <p>checksampleAryの値は「{{ checksampleAry }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-6',
    data: {
        checksampleAry : [],
    }
});
</script>
hoge fuga piyo

checksampleAryの値は「{{ checksampleAry }}」です。

複数版(配列)

v-for、v-bindを使うと楽です。
上と同じ処理ですが値を「checklistAry」に追加するだけでチェックボックスを増やすことが出来ます。

サンプルコード
<div id="app-7">
    <span v-for="(val, key) in checklistAry">
        <input type="checkbox" v-model="checksampleAry" v-bind:value="val" /> {{ val }}
    </span>
    <p>checksampleAryの値は「{{ checksampleAry }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-7',
    data: {
        checklistAry : ['hoge', 'fuga', 'piyo'],
        checksampleAry : [],
    }
});
</script>
{{ val }}

checksampleAryの値は「{{ checksampleAry }}」です。

ラジオボタン

ラジオボタンも他のフォーム同様に、v-modelの指定が可能です。

通常版

サンプルコード
<div id="app-8">
    <input type="radio" value="hoge" v-model="radiosample" /> hoge
    <input type="radio" value="fuga" v-model="radiosample" /> fuga
    <input type="radio" value="piyo" v-model="radiosample" /> piyo
    <p>radiosampleの値は「{{ radiosample }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-8',
    data: {
        radiosample : 'hoge',
    }
});
</script>
hoge fuga piyo

radiosampleの値は「{{ radiosample }}」です。

配列版

候補となる値を配列で管理してあげると、追加、削除が楽ですね。

サンプルコード
<div id="app-9">
    <span v-for="(val, key) in radiolistAry">
        <input type="radio" v-bind:value="val" v-model="radiosample" /> {{ val }}
    </span>
    <p>radiosampleの値は「{{ radiosample }}」です。</p>
</div>

<script>
new Vue({
    el: '#app-9',
    data: {
        radiolistAry : ['hoge', 'fuga', 'piyo'],
        radiosample : 'hoge',
    }
});
</script>
{{ val }}

radiosampleの値は「{{ radiosample }}」です。


v-modelはVue.jsの基礎的な機能となるので、是非身につけておきましょう。

以上、v-modelとは?使い方をサンプルコードで解説、でした。

Vue.js