v-if, v-else, v-else-if, v-show
v-if is used to determine if an element will be rendered. It is used in conjuction with v-else and v-else-if to chain conditionals and determine the rendering of multiple elements.
<div v-if="type === 'A'"> A </div> <div v-else-if="type === 'B'"> B </div> <div v-else-if="type === 'C'"> C </div> <div v-else> Not A/B/C </div>
v-if can be used with the <template> tag to determine the renderization of multiple elements at once.
<template v-if="ok"> <h1>Title</h1> <p>Paragraph 1</p> <p>Paragraph 2</p> </template>
v-show is also used to determine if an element will be rendered or not. The difference with v-if is that v-show use the css property display to show or not an element, while v-if removes or adds the element from the DOM.
<h1 v-show="ok">Hello!</h1>
v-for is used for rendering elements in a list. It is possible to render elements from an array but also from an object, and even ranges. The :key attribute is used for helping Vue keep a good update performance when the list is mutated.
const items = ref([
{ id: 'foo', message: 'Foo', show: true },
{ id: 'bar', message: 'Bar', show: true },
{ id: 'baz', message: 'Baz', show: false }
])
const myObject = reactive({
title: 'How to do lists in Vue',
author: 'Jane Doe',
publishedAt: '2016-04-10'
})
<!-- <li v-for="(item, index) of items"> is also valid -->
<ul>
<li v-for="(item, index) in items" :key="item.id">
{{ item.message }}
</li>
</ul>
<!-- It is possible to loop over object properties -->
<ul>
<li v-for="(value, key, index) in myObject">
{{ index }}. {{ key }}: {{ value }}
</li>
</ul>
<!-- Use in ranges -->
<span v-for="n in 10">{{ n }}</span>
<!-- If used v-for and v-if is recommended to use v-for on <template> and v-if in children -->
<template v-for="item in items" :key="item.id">
<li v-if="item.show">
{{ todo.name }}
</li>
</template>
<!-- v-for can be used also on components -->
<MyComponent
v-for="(item, index) in items"
:item="item"
:index="index"
:key="item.id"
/>
References