v-ifを理解する!!

ユーザーがいるページに応じて表示する内容に制限をかけたり、ゲストか会員かどうかに応じてなどの条件分岐を実装したい。

v-if条件分岐レンダリングというものがあるらしい。学習していく。

v-ifって何

v-if ディレクティブは、ブロックを条件に応じて描画したい場合に使用されます。ブロックは、ディレクティブの式が真を返す場合のみ描画されます

vue版条件分岐メソッドといったところか。

<template v-if= "user.admin?">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

条件が真のときに<template>要素全体が表示され、偽のときには<template>要素全体が非表示になる。今回の場合だと、userがadminの場合template内の要素がviewで表示されるようになる。

どんな使い方がある?

  1. 出力された値に応じて条件分岐

関数の結果に応じて表示させることができる。

<div v-if="Math.random() > 0.5">
  Now you see me
</div><div v-else>
  Now you don't
</div>

Math.randomが0.5以上だった場合とそれ以外とで表示内容を分けている。

      2. enumを使って条件分岐

v-ifとenumを組み合わせて描画するボタンを管理している。

<v-btn
v-if="user.drunk_state===‘ tipsy'"
depressed
color="primary"
class="ma-2"
href="/admin"
>酒ケジュールを見る</v-btn>

      3. ページによって条件分岐

現在ユーザーがいるページに合わせて表示する内容を変える

divタグに充てることも出来る。

<div v-if="isMypage">
<v-btn class="ma-2" outlined color="primary" @click="$emit('push-edit')">
<v-icon left>mdi-pencil</v-icon>編集
</v-btn>
</div>

<script>
<--omit-->
computed: {
isMypage() {
return this.$route.path.includes("/mypage/")
}
}
<--omit-->
<\\script>

似たメソッドにv-showがある。

<条件的に要素を表示するための別のオプションは v-show です。

<h1 v-show="ok">Hello!</h1>

v-ifとの違いは、要素が常にDOMに保持されるということです。

つまり、v-showは要素の表示と非表示の切り替えをCSSの書き換えによって実現している。

v-showがfalseを返すものに対してはdisplay: none;が充てられる。

Vue.jsのv-ifとv-showの違い - Qiita

v-showって何

v-if vs v-show

v-if は 遅延描画 (lazy) 。

初期表示において false の場合、何もしない。条件付きブロックは、条件が最初に true になるまで描画されることはない。

一方で、v-show はとてもシンプルで、要素は初期条件に関わらず常に描画され、シンプルな CSS ベースの切り替えとして保存される。

一般的に下記のように使い分けがされている。

v-show : とても頻繁に何かを切り替える必要がある場合→

v-if : 条件が実行時に変更することがほとんどない場合

Vue.js 条件分岐 v-if/v-else/v-elsif/v-show/複数条件/OR/AND

所感

お酒の強さに応じて結果の表示を変えたり、ゲストか会員かに合わせて診断ボタンを変えることが出来そうだ。

条件付きレンダリング | Vue.js

hashlog/routes.rb at 360616b37e4a2159eec198286ba0ad5bf2f16429 · aiandrox/hashlog

Vue.js - Role Based Authorization Tutorial with Example

フロントエンドの権限管理(role)実装方法 - Qiita