🧩 Exercícios: Comunicação entre Componentes com input() e output()
🧩 Exercícios Práticos: Comunicação entre Componentes com input() e output()
Spec Frontend Com Angular • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 05.1 — Input Signal com input.required()
Contexto: Input Signal com input.required() no contexto de Comunicação entre Componentes com input() e output().
Requisitos de Execução:
- Declarar propriedade de entrada no filho com
titulo = input.required<string>().
Resultado Esperado
Input Signal tipado e validado como obrigatório em tempo de compilação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_1_SeuNome - Envie na tarefa:
Atividade Cap 05 - Comunicação entre Componentes com input() e output()
🔑 Gabarito de Código & Solução Comentada
// card-filho.component.ts
import { Component, input } from '@angular/core';
@Component({
selector: 'app-card-filho',
standalone: true,
template: `<h3>{{ titulo() }}</h3>`
})
export class CardFilhoComponent {
titulo = input.required<string>();
subtitulo = input<string>('Valor Padrão');
}
🔍 Nível 2: Prática
Problema 05.2 — Output Signal com output() e Emissão de Eventos
Contexto: Output Signal com output() e Emissão de Eventos no contexto de Comunicação entre Componentes com input() e output().
Requisitos de Execução:
- Declarar evento de saída no componente filho com
excluir = output<number>()e emitir no clique.
Resultado Esperado
Evento emitido com `this.excluir.emit(id)` capturado pelo componente pai.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_2_SeuNome - Envie na tarefa:
Atividade Cap 05 - Comunicação entre Componentes com input() e output()
🔑 Gabarito de Código & Solução Comentada
// item-linha.component.ts
import { Component, input, output } from '@angular/core';
@Component({
selector: 'app-item-linha',
standalone: true,
template: `
<div>
<span>{{ nome() }}</span>
<button (click)="onRemover()">Excluir</button>
</div>
`
})
export class ItemLinhaComponent {
id = input.required<number>();
nome = input.required<string>();
excluir = output<number>();
onRemover() { this.excluir.emit(this.id()); }
}
⚡ Nível 3: Integração
Problema 05.3 — Two-Way Binding com model() no Angular 18
Contexto: Two-Way Binding com model() no Angular 18 no contexto de Comunicação entre Componentes com input() e output().
Requisitos de Execução:
- Criar componente de contador utilizando
contador = model<number>(0)permitindo binding[(contador)]='valor'.
Resultado Esperado
Two-way binding nativo com Signals simplificando a comunicação pai-filho.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_3_SeuNome - Envie na tarefa:
Atividade Cap 05 - Comunicação entre Componentes com input() e output()
🔑 Gabarito de Código & Solução Comentada
// contador-model.component.ts
import { Component, model } from '@angular/core';
@Component({
selector: 'app-contador-model',
standalone: true,
template: `
<button (click)="contador.set(contador() - 1)">-</button>
<span>{{ contador() }}</span>
<button (click)="contador.set(contador() + 1)">+</button>
`
})
export class ContadorModelComponent {
contador = model<number>(0);
}
🏆 Nível 4: Desafio Corporativo
Problema 05.4 — Transformação de Inputs com input(transform)
Contexto: Transformação de Inputs com input(transform) no contexto de Comunicação entre Componentes com input() e output().
Requisitos de Execução:
- Converter automaticamente inputs de string para boolean usando
desabilitado = input(false, { transform: booleanAttribute }).
Resultado Esperado
Transformador de atributo nativo aplicado na prop de entrada.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_4_SeuNome - Envie na tarefa:
Atividade Cap 05 - Comunicação entre Componentes com input() e output()
🔑 Gabarito de Código & Solução Comentada
// transform-input.component.ts
import { Component, input, booleanAttribute } from '@angular/core';
@Component({
selector: 'app-btn-custom',
standalone: true,
template: `<button [disabled]="desabilitado()">Salvar</button>`
})
export class BtnCustomComponent {
desabilitado = input(false, { transform: booleanAttribute });
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |