Vue.jsに用意されているv-modelを使うと、チェックボックス(inputタグのtypeがcheckbox)のデータとVue.jsのデータを連動させることができます。
初期設定されているデータを指定したり、現在選択されている項目のデータをタイムリーに取得し、それに合わせて画面の表示を変えるといった処理を行うことが可能になります。
ただし、チェックボックスでv-modelを使う場合は、選択できる項目が1つなのか複数なのかでデータの持たせ方や記述が違うなど注意点があります。
ここでは、チェックボックスでv-modelを使う方法や注意点を実例で解説しています。
チェックボックスでv-modelを使う方法と注意点
v-modelの基本的な使い方
チェックボックスでv-modelを使う場合は、inputタグに対して以下のようにv-modelを設定します。
<input type="checkbox" id="id名" v-model="プロパティ名">
v-modelがchecked属性の代わりになるため、checked属性を設置する必要はありません。
注意点
チェックできる項目が一つだけの場合と、選択項目が複数ある場合でデータの持たせ方や属性の記載方法が異なるので注意が必要です。
注意ポイントはvalueの有無と、プロパティの値が真偽値か配列かの違いです。
選択項目の数 | プロパティの値 | タグの属性 |
---|---|---|
1つ | 真偽値(true/false) | value属性は不要 |
複数 | 配列 | value属性が必須 |
以下で選択項目の数が1つの場合と複数の場合を、それぞれ実例を用いてまとめています。
選択項目が1つだけのチェックボックス
使い方と注意点
選択項目が1つだけのチェックボックスの場合、v-model=”プロパティ名”とし、プロパティの値を真偽値(true or false)にします。
プロパティの値がtrueの時はチェックあり、チェックを外すとプロパティの値がfalseになります。
デフォルトでチェック無しにしたい場合は、プロパティの値をfalseにしておきます。
実例
var app = new Vue({
el:'#app',
data:{
//checkboxの状態
isChecked: true
}
})
<body>
<div id="app">
<p>■checkboxでv-modelを使う</p>
<input type="checkbox" id="checkbox1" v-model="isChecked">
<label for="checkbox1">プロパティの値:{{isChecked}}</label>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
</body>
▼ブラウザの表示
デフォルトではv-modelでつないでいるisCheckedプロパティの値がtrueなので、チェックありになります。
↓ チェックを外す
チェックを外したことで、isCheckedプロパティの値がfalseに変わっています。
↓ チェックをつける
再度チェックをつけると、isCheckedプロパティの値がfalse→trueに切り替わります。
複数のチェックボックスでv-modelを使う方法
使い方と注意点
複数のチェックボックスの場合はVue.js側でプロパティの持たせ方と、タグの属性の設定方法が異なります。
ポイントとしては、配列内にvalueの値を記述するとチェックマークがつきます。配列が空欄の場合、すべてチェックマークなしの状態になります。
inputタグは次のようになります。
<input type="checkbox" v-model="プロパティ名" value="固有の値">
実例
id名がblue, redgreen,green,の3つのチェックボックスを用意して、初期状態で、blueとgreenにチェックマークが入った状態をつくる場合は以下のようになります。
var app = new Vue({
el:'#app',
data:{
//複数のcheckbox
multiChecked: ["blue", "Green"]
}
})
<body>
<div id="app">
<p>■checkboxでv-modelを使う</p>
<input type="checkbox" id="red" v-model="multiChecked" value="red">
<label for="red">Red</label>
<input type="checkbox" id="blue" v-model="multiChecked" value="blue">
<label for="blue">Blue</label>
<input type="checkbox" id="green" v-model="multiChecked" value="green">
<label for="green">Green</label>
<br>
<p>プロパティの値: {{multiChecked}}</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
</body>
▼ブラウザの表示
デフォルトではv-modelで選択しているmultiCheckedプロパティの値が["blue", "green"]
なので、該当するid名のチェックボックスがチェック済みになります。
↓ Redにチェックマークを入れる。
multiCheckedプロパティの値が["blue", "green", "red"]
になっていることに注目してください。
↓ 全てのチェックマークを外す。
全てのチェックマークを外すと、multiCheckedプロパティの値は空の配列[]
になります。