4.

【Vue.js】v-ifの条件分岐とtemplateによるグループ化

編集

v-ifディレクティブを使用することで条件分岐処理を実行することが出来る。

 

ifの実装例

html

<div id="app">
    <p v-if="true_data">This is True</p>
    <p v-if="false_data">This is False</p>
</div>

js

var app = new Vue({
  el: '#app',
  data: {
    true_data: true,
    false_data: false,
  }
})

出力結果

This is True

true_datatrue の要素だけが描画され、false_data の方は DOM ごと生成されない。表示・非表示を CSS で切り替えるのではなく、条件が false の要素はそもそも作られないのが v-if の挙動である。

 

else if と else の実装

html

<div id="app">
  <div v-if="false_data">
    if
  </div>
  <div v-else-if="true_data">
    else if
  </div>
  <div v-else>
    else
  </div>
</div>

出力結果

else if

v-else-ifv-else は、直前の要素が v-if / v-else-if であることが条件になる。間に別の要素を挟むと認識されない。また v-else には値を書かない。

 

templateによるグループ化

ifを付けた要素の子要素が複数ある場合は正しく評価されない。

以下、正しく評価されない実装例

<div v-if="true_data">
    <p>aaa</p>
    <p>bbb</p>
</div>

この書き方だと、条件分岐のためだけに <div> が実際の DOM に残ってしまう。レイアウト用の意味を持たない要素が増えると、CSS のセレクタや Flexbox / Grid の親子関係が崩れる原因になる。

正しく評価するにはtemplateタグを使用する必要がある。

<template v-if="true_data">
    <p>aaa</p>
    <p>bbb</p>
</template>

<template>描画されない入れ物なので、条件を満たしたときに中身の <p> だけが出力される。複数要素をまとめて出し分けたいときは、常にこちらを使えばよい。

 

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストール(ファイルのダウンロード)
  2. npmを使用したプロジェクトの作成
  3. for 繰り返し処理
  4. ifの条件分岐とtemplateを用いたグループ化
  5. クリック時のイベント処理(on:click)
  6. modelとdata フォーム入力値とDOMへの即時反映
  7. computed(算出プロパティ)と使い方とdataとの違い
  8. ライフサイクルフック(created / mounted / updated / destroyedの使い方)
  9. $nextTickの使い方(ライフサイクルフック)
  10. メソッドの定義方法
  11. エラー一覧
  12. ルーティング設定
  13. aリンクの貼り方と動的URLの作成
  14. Mixinを利用した共通処理の記述方法
  15. v-bindによるデータ連携
  16. ヘッダー/フッターの共通コンポーネント
  17. ナビゲーションの現在ページをハイライトする方法
  18. 画面サイズの取得方法

最近更新/作成されたページ