Vueテンプレートのループ覚書

Vuejsのテンプレートで初めてループ処理を書くとき、いくつか引っ掛かったので備忘録としてまとめます。

v-forとv-ifを同時に使いたいとき

v-forとv-ifを同じ要素に使うな、と公式に書いていますので、同時に使いたいときはtemplate要素で囲んで対応。

<!-- 例 -->
<template v-for="d in data">
  <div v-if="d.bool">{{ d.title }}</div>
</template>

属性のつけ外し

たとえば5周目以降のリンクにはtarget=”_blank”をつける、 それ以外にはtarget属性自体をつけたくないとき。

三項演算子でnull を指定してやると解決しました。

<!-- 例 -->
<div v-for="(d,index) in data">
 <a :href="d.link" :target="(4<index) ? '_blank' : null">{{ d.text }}</a>
</div>

nullの代わりにfalseを指定するという記事もどこかで見かけたのですが、boolで指定する要素などでうまくいかないケースがあったので、私はnullを使っています。

ループ要素がゼロのときのv-if

ループ対象がないとき というケースがあり得たので、v-if=”data.length” と書いたところダメでした。

正しくは以下のように、 v-if=”data && data.lenght ” とするようです。

<!-- 例 --> 
<ul v-if="data && data.length">
  <li v-for="d in data"></li>
</ul>

属性値を固定値+変数にする

たとえば、id=`hoge-${d.id}` のように書きたいとき。

v-bind=””の値はJavaScriptと思って書いて差し支えないので、” ‘hoge-‘ + d.id “のように書けばOK。

<!-- 例 -->
<div v-for="(d,index) in data">
  <p :id="'index-' + index">lorem</p>
</div>

参考

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

タイトルとURLをコピーしました