Renderização de Listas com a Diretiva v-for
No Vue.js, a diretiva v-for
v-for="item in items"
Nesse caso, items
item
Por exemplo, o seguinte código exibe uma lista de nomes contidos em um array:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<ul>
<li v-for="user in users">{{ user }}</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return { users: ['Tom', 'Sam', 'Alice', 'Kate'] }
}
}).mount('#app');
</script>
</body>
</html>
Neste exemplo, cada elemento do array users
<li>
user

Iterando sobre Arrays de Objetos
É possível exibir propriedades de objetos mais complexos contidos em um array. Veja o exemplo a seguir:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<ul>
<li v-for="user in users">
<p>Nome: {{ user.name }}</p>
<p>Idade: {{ user.age }}</p>
</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return { users: [
{ name: 'Tom', age: 22 },
{ name: 'Bob', age: 31 },
{ name: 'Sam', age: 28 }
]}
}
}).mount('#app');
</script>
</body>
</html>

Índices na Iteração
Com v-for
v-for="(element, index) in array"
No exemplo abaixo, o índice é exibido ao lado do elemento:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<ul>
<li v-for="(user, index) in users">{{ index + 1 }}. {{ user }}</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return { users: ['Tom', 'Bob', 'Sam'] }
}
}).mount('#app');
</script>
</body>
</html>

Iterando sobre Propriedades de Objetos
Além de arrays, a diretiva v-for
v-for="(value, key) in obj"
No exemplo a seguir, as propriedades de um objeto são exibidas na página:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<ul>
<p v-for="(value, key) in user">{{ key }}: {{ value }}</p>
</ul>
</div>
<script>
Vue.createApp({
data() {
return {
user: {
name: 'Tom',
age: 22,
language: 'JavaScript',
framework: 'Vue.js',
},
};
},
}).mount('#app');
</script>
</body>
</html>

Uso de template
A diretiva v-for
template
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<div id="app">
<ul>
<template v-for="user in users">
<li>Nome: {{ user.name }}</li>
<li>Idade: {{ user.age }}</li>
</template>
</ul>
</div>
<script src="https://unpkg.com/vue"></script>
<script>
Vue.createApp({
data() {
return { users: [
{ name: 'Tom', age: 22 },
{ name: 'Bob', age: 31 },
{ name: 'Sam', age: 28 }
]}
}
}).mount('#app');
</script>
</body>
</html>
Iteração de Números
Além de arrays e objetos, a diretiva v-for
<div>
<span v-for="n in 10">{{ n }} </span>
</div>

Neste caso, a iteração ocorre de 1 até 10.
v-for e v-if
Quando v-for
v-if
v-if
v-if
v-for
<li v-for="user in users" v-if="user.age > 25">
<p>Nome: {{ user.name }}</p>
<p>Idade: {{ user.age }}</p>
</li>
Para corrigir essa situação, a diretiva v-for
template
<template v-for="user in users">
<li v-if="user.age > 25">
<p>Nome: {{ user.name }}</p>
<p>Idade: {{ user.age }}</p>
</li>
</template>
Isso garante que as variáveis definidas por v-for
v-if
