🧩 Exercícios: Slots Padrão, Nomeados e Scoped Slots
🧩 Exercícios Práticos: Slots Padrão, Nomeados e Scoped Slots
Spec Frontend Com Vue • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 07.1 — Slot Padrão (Default Slot) com Conteúdo Fallback
Contexto: Slot Padrão (Default Slot) com Conteúdo Fallback no contexto de Slots Padrão, Nomeados e Scoped Slots.
Requisitos de Execução:
- Criar componente
CardContainer.vuecom<slot>Conteúdo padrão</slot>.
Resultado Esperado
Slot renderizado com conteúdo passado pelo pai ou fallback.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_1_SeuNome - Envie na tarefa:
Atividade Cap 07 - Slots Padrão, Nomeados e Scoped Slots
🔑 Gabarito de Código & Solução Comentada
<!-- CardContainer.vue -->
<template>
<div class="card-box">
<slot>
<p class="text-muted">Nenhum dado disponível.</p>
</slot>
</div>
</template>
🔍 Nível 2: Prática
Problema 07.2 — Slots Nomeados com e
Contexto: Slots Nomeados com
Requisitos de Execução:
- Criar componente
ModalDialog.vuecom seções nomeadas e consumir usando<template #header>.
Resultado Esperado
Modal estruturado com cabeçalho, corpo e rodapé preenchidos via slots nomeados.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_2_SeuNome - Envie na tarefa:
Atividade Cap 07 - Slots Padrão, Nomeados e Scoped Slots
🔑 Gabarito de Código & Solução Comentada
<!-- ModalDialog.vue -->
<template>
<div class="modal-card">
<header><slot name="header"><h4>Título Padrão</h4></slot></header>
<main><slot /></main>
<footer><slot name="footer" /></footer>
</div>
</template>
⚡ Nível 3: Integração
Problema 07.3 — Scoped Slots (Slots Escopados) com Passagem de Dados do Filho para o Pai
Contexto: Scoped Slots (Slots Escopados) com Passagem de Dados do Filho para o Pai no contexto de Slots Padrão, Nomeados e Scoped Slots.
Requisitos de Execução:
- Criar componente de lista genérica passando cada item para o slot pai com
<slot :item='item' />.
Resultado Esperado
Pai customiza o layout de renderização de cada linha da lista.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_3_SeuNome - Envie na tarefa:
Atividade Cap 07 - Slots Padrão, Nomeados e Scoped Slots
🔑 Gabarito de Código & Solução Comentada
<!-- ListaGenerica.vue -->
<script setup lang="ts" generic="T">
defineProps<{ items: T[] }>();
</script>
<template>
<ul>
<li v-for="(item, idx) in items" :key="idx">
<slot :item="item" :index="idx">{{ item }}</slot>
</li>
</ul>
</template>
🏆 Nível 4: Desafio Corporativo
Problema 07.4 — Componente Headless Table com Scoped Slots e Ordenação
Contexto: Componente Headless Table com Scoped Slots e Ordenação no contexto de Slots Padrão, Nomeados e Scoped Slots.
Requisitos de Execução:
- Desenvolver tabela headless que gerencie ordenação internamente e delegue visualização das células aos slots.
Resultado Esperado
Tabela headless flexível reutilizável em todo o ecossistema corporativo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_4_SeuNome - Envie na tarefa:
Atividade Cap 07 - Slots Padrão, Nomeados e Scoped Slots
🔑 Gabarito de Código & Solução Comentada
<!-- HeadlessTable.vue -->
<script setup lang="ts">
import { ref } from 'vue';
const props = defineProps<{ dados: any[] }>();
const ordenacao = ref({ coluna: '', asc: true });
</script>
<template>
<table>
<thead><slot name="head" :sort="ordenacao" /></thead>
<tbody>
<tr v-for="linha in dados" :key="linha.id">
<slot name="row" :row="linha" />
</tr>
</tbody>
</table>
</template>
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |