Vue.jsにおける条件分岐とv-showによる表示・非表示の切り替え

vue

Vue.jsにおけるif文やv-showによる表示の切り替えについて解説します。

v-showによる表示・非表示の切り替え

v-showは真偽値によって表示の切り替えをすることができます。

具体的にはfalseの時に、display:noneが付与され非表示になります。

<div id="app">
  <input type="checkbox" v-model='check'>
  <div v-show="check">チェック済</div>
</div>

 

new Vue({
  el: '#app',
  data: {
    text: '',
    check: true
  }
})

デフォルトの状態ではチェックが入っておりtrue。チェックを入れるとfalseに切り替わり、チェック済みの文言が非表示になります。

v-ifによる表示の切り替え

v-ifは真偽値を判定し、trueの場合はこれ、falseの場合はこれ、といった具体で条件分岐を記述できます。

同じコードでv-showの部分をv-ifに変更してみます。

<div id="app">
  <input type="checkbox" v-model='check'>
  <div v-if="check">チェック済</div>
</div>

 

new Vue({
  el: '#app',
  data: {
    text: '',
    check: true
  }
})

結果は全く同じになります。ifがtrueの場合はチェック済みが表示され、falseの場合(チェックが外れている場合)は非表示になります。

showとifどちらを使う?

上記のコードでは同じような結果を得ることができましたが、両者の違いはなんでしょうか?

まず、v-showは非表示にdisplay:noneを使用していると言いました。一方のifは要素自体が消える点に注目です。

v-showの方がレンダリングコストが低く、v-ifの場合はレンダリングコストが高くなります。

頻繁にオン/オフの切り替えがある場合はv-showを選択する方がベターだと思います。

より複雑な条件分岐を使うならif

ただし、ifは単なる表示/非表示よりも条件分岐をしたい時に活用できます。

<div id="app">
  <input type="checkbox" v-model='check'>
  <div v-if="check">チェック済</div>
  <div v-else="check">チェック未</div>
</div>

 

new Vue({
  el: '#app',
  data: {
    text: '',
    check: true
  }
})

チェックを外した場合、つまりfalseの場合「チェック未」の表示に切り替わります。

他にもelse if にも対応しています。
<div id="app">
<div v-if="age >= 40 ">40代以上</div>
<div v-else-if="age >= 30 ">30代</div>
<div v-else>30代未満</div>
</div>

 

new Vue({
  el: '#app',
  data: {
    age: 30
  }
})


カテゴリー