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で表示されるようになる。
どんな使い方がある?
- 出力された値に応じて条件分岐
関数の結果に応じて表示させることができる。
<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;が充てられる。
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
所感
お酒の強さに応じて結果の表示を変えたり、ゲストか会員かに合わせて診断ボタンを変えることが出来そうだ。
hashlog/routes.rb at 360616b37e4a2159eec198286ba0ad5bf2f16429 · aiandrox/hashlog