🚀 Capítulo 11: Slots - Compartimentos
🎯 Objetivo da Aula
Ao final desta aula, você entenderá o que são os Slots no Vue.js e saberá como usá-los para passar não apenas dados, mas blocos inteiros de HTML de um componente Pai para um componente Filho.
🏢 O Cenário Prático (Seu Desafio)
As naves de carga precisam transportar diferentes tipos de mercadorias: às vezes caixas de comida, às vezes droides, às vezes armas. Seu desafio é criar um componente chamado Container que tenha um espaço vazio (um Slot) onde o Pai possa colocar qualquer tipo de conteúdo dentro!
🧠 Fundamentos: A Teoria Traduzida
Até agora, passamos dados para os componentes filhos usando Props (que aceitam textos, números, etc.). Mas e se quisermos passar uma estrutura HTML inteira (com parágrafos, imagens e botões)? É para isso que servem os Slots.
Pense no Slot como um buraco ou um “compartimento vazio” que você deixa no componente Filho. O componente Pai decide o que vai colocar lá dentro.
Como usar:
- No Filho: Você coloca a tag
<slot></slot>onde quer que o conteúdo apareça. - No Pai: Você escreve o conteúdo dentro da tag do componente.
📖 Exemplo Guiado: Container de Carga
Vamos criar o componente de Container.
🛠️ Passo a Passo (Criando o Filho: Container.vue)
Crie o arquivo src/components/Container.vue:
<template>
<div class="caixa">
<h3>📦 Compartimento de Carga</h3>
<hr />
<!-- O conteúdo enviado pelo pai vai aparecer aqui -->
<slot></slot>
</div>
</template>
<style scoped>
.caixa {
border: 2px dashed #ffe81f;
padding: 15px;
margin: 10px;
background-color: #333;
}
</style>🛠️ Passo a Passo (Usando no Pai: App.vue)
<template>
<div>
<h1>🛸 Carregando a Nave</h1>
<!-- Passando texto simples -->
<Container>
<p>Rações de comida para os rebeldes.</p>
</Container>
<!-- Passando uma estrutura complexa -->
<Container>
<h4>🤖 Unidade R2-D2</h4>
<button @click="reparar">Iniciar Reparos</button>
</Container>
</div>
</template>
<script setup>
import Container from './components/Container.vue';
function reparar() {
alert('Bip bop! Reparando...');
}
</script>🕹️ Como Executar e Testar no VS Code
- Salve os arquivos e veja o navegador.
- Você verá dois containers amarelos pontilhados, cada um com um conteúdo totalmente diferente dentro!
🛠️ Prática Obrigatória 1
O Vue permite criar Slots Nomeados quando você precisa de mais de um espaço. Pesquise como usar <slot name="cabecalho"> e tente criar um cabeçalho personalizado para o seu container.
🛠️ Prática Obrigatória 2
Passe um conteúdo padrão dentro da tag <slot>Conteúdo Padrão</slot> no filho. Ele só deve aparecer se o pai não enviar nada.
🔑 Gabarito de Código/Fórmulas
Prática 2:
No Container.vue:
<slot>Vazio (Nenhuma carga detectada)</slot>