【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>
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>
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>
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>
radiosampleの値は「{{ radiosample }}」です。
v-modelはVue.jsの基礎的な機能となるので、是非身につけておきましょう。
以上、v-modelとは?使い方をサンプルコードで解説、でした。
ディスカッション
コメント一覧
まだ、コメントがありません