[Vue.js] 条件付きレンダリング (if・for文)

Vue.jsのテンプレートではvue.js独自のif・forなどの書き方があります。これらはディレクティブの中でも条件付きレンダリングと呼ばれます。

[参考]
Vue.js公式ページ 条件付きレンダリング

if文

v-ifの基本的な使い方

条件に合ったときに文字を表示するというプログラムを作成してみます。
[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
<div v-if="isActive">
Active
</div>

  </div>
</body>
</html>

[JavaScript]

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

これで画面にはActiveという文字が表示されます。
isActive:falseに変更すると画面に何も表示されなくなります。

v-elseの基本的な使い方

if else文のelse部分の書き方です。
v-ifとv-elseは続けた要素で書かなければならないという制約があります。

[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
<div v-if="isActive">
Active
</div>
<div v-else="isActive">
No Active
</div>

  </div>
</body>
</html>

[JavaScript]

new Vue({
el: '#app',
data:{
   isActive:false
  }
})

こちらはisActiveがfalseなのでNo Activeが表示されます。

v-else-if文

[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
    <div v-if="sampleA">
    v-if
    </div>

    <div v-else-if="sampleB">
    v-else-if
    </div>

    <div v-else>
    v-else
    </div>

  </div>
</body>
</html>

[JavaScript]

new Vue({
el: '#app',
data:{
   sampleA:false,
   sampleB:false
  }
})

こちらはv-if,v-else-ifがともにfalseなので、v-elseだけが実行されて、画面に「v-else」の文字が表示されます。

v-show

v-ifは該当しないと要素を表示しません。v-showは要素にdisplay:noneを付けて見えないようにするという違いがあります。

templateタグは表示されないので、ここにv-showは設定できません。

v-showは最初に描画して、必要ないものを消すという動作になります。

v-for

vueでのfor文の使い方です。配列に入っている教科名をリスト形式で表示させてみます。

インデックス無し

[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
  <ul>
  <li v-for="subject in subjects">{{subject}}</li>
  </ul>

  </div>
</body>
</html>

vueディレクティブのsubject in subjects”>{{subject}}がポイントになります。
subjectsの中にある複数の配列をsubjectという変数に1つずつ入れていきます。

[JavaScript]

new Vue({
el: '#app',
data:{
  subjects:['国語','英語','数学']
  }
})

インデックス有り

第二引数にindexを指定するとインデックスを表示することができます。

[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
  <ul>
  <li v-for="(subject , index) in subjects">[{{index}}]:{{subject}}</li>
  </ul>

  </div>
</body>
</html>

[JavaScript]

new Vue({
el: '#app',
data:{
  subjects:['国語','英語','数学']
  }
})

[出力]
2020-05-14_17h10_57

インデックスとキー有り

インデックスだけでなく、オブジェクトの場合はキーも表示することができます

[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
  <ul>
  <li v-for="(value, key , index) in sampleObject">[{{index}}]:({{key}}){{value}}</li>
  </ul>

  </div>
</body>
</html>

[JavaScript]

new Vue({
el: '#app',
data:{
  subjects:['国語','英語','数学'],
  sampleObject:{
  	color:'red',
    width:'200px',
    height:'300px'
  }
  }
})

[表示]

2020-05-14_17h26_49

for文での繰り返し指定

forで10回繰り返しを行うプログラムです。

[HTML]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
 
  <ul>
  <li v-for="n in 10">{{n}}</li>
  </ul>

  </div>
</body>
</html>

v-for=”n in 10″で10回繰り返すと言う意味です。

[JavaScript]

new Vue({
el: '#app',
data:{

  }
})


Author: webmaster