Diretivas e Renderização 📜
Aula 04 - Controlando o Fluxo do Template
🛠️ O que são Diretivas?
- Atributos especiais com o prefixo
v- - Aplicam comportamentos reativos ao DOM
- "Ensina" o HTML a agir como lógica
❓ Renderização Condicional: v-if
- Adiciona ou Remove o elemento do documento
- Ideal para elementos que mudam raramente
🚥 v-else e v-else-if
- Funciona como o
if/elsetradicional
👁️ Visibilidade: v-show
- Não apaga o elemento, apenas aplica
display: none - Mais rápido para trocas frequentes (ex: piscar mensagem)
- O elemento sempre está no DOM (pode afetar performance se for gigante)
🥊 v-if vs v-show
| Característica | v-if | v-show |
|---|---|---|
| Custo troca | Alto (recria DOM) | Baixo (muda CSS) |
| Custo inicial | Baixo (se falso, não cria) | Alto (sempre cria) |
| Segurança | Melhor (remove o HTML) | Pior (HTML vísivel no Inspecionar) |
🔄 Renderização de Listas: v-for
- Percorre arrays ou objetos para gerar múltiplos elementos
- Sintaxe:
item in listaou(item, index) in lista
🔑 A Importância da :key
- Atributo obrigatório para performance no
v-for - Ajuda o Vue a rastrear cada elemento de forma única
📡 Escuta de Eventos: v-on (@)
- Captura cliques, inputs, teclados e mais
- Atalho:
@
⚡ Chamando Funções
- Você pode passar argumentos:
@click="deletar(item.id)" - Acessar o evento nativo:
@click="tratar($event)"
🛠️ Modificadores de Eventos
.prevent:e.preventDefault()(evita recarregar form).stop:e.stopPropagation()(evita bolhas).once: Roda o evento apenas uma vez
⌨️ Modificadores de Teclado
- Reagir a teclas específicas:
@keyup.enter="enviar"@keyup.esc="cancelar"
🏗️ v-for com Objetos
- Também podemos percorrer propriedades de um objeto:
📊 Fluxo de Renderização
graph TD
Data[Array de Tarefas] --> VFor[v-for loop]
VFor --> DOM[Lista de Itens no Navegador]
UserClick[Clique em X] --> VOn[@click]
VOn --> Function[Remover do Array]
Function --> Data ⚠️ Perigo: v-if com v-for
- MÁ PRÁTICA: Usar as duas na mesma tag
- O Vue prioriza o
v-if(pode dar erro de item indefinido) - Solução: Use uma tag
<template>ou umacomputed propertypara filtrar
🛠️ Template Tag
- Tag "invisível" que não aparece no HTML final
- Ótima para agrupar diretivas sem criar divs extras
🏗️ Desafio da Aula
- Criar uma lista de compras dinâmica
- Adicionar itens via input + botão
- Remover itens ao clicar neles
- Exibir mensagem se a lista estiver vazia
🏁 Resumo
- Diretivas estendem o HTML
v-if/v-forpara estrutura@click/v-onpara comportamento- Identificadores únicos (
ky) salvam a performance
🏁 Dúvidas?
Bom código a todos! Próxima aula: Componentes e Props.