Como usar o decorador de saída em Angular
No Angular, uma página da Web pode conter muitos componentes reutilizáveis diferentes. Cada componente geralmente contém sua própria lógica TypeScript, modelo HTML e estilo CSS.
Você também pode reutilizar componentes dentro de outros componentes. Nesse caso, você pode usar o decorador de saída para enviar informações de um componente filho de volta para seu componente pai.
Você também pode usar o decorador de saída para ouvir os eventos que ocorrem no componente filho.
Como adicionar o decorador de saída a um componente filho
Primeiro, você precisará criar um novo aplicativo Angular com um componente pai e um componente filho.
Depois de ter um componente pai e filho, você pode usar o decorador de saída para transferir dados e ouvir eventos entre os dois componentes.
- Crie um novo aplicativo Angular. Por padrão, “app” é o nome do componente raiz. Este componente inclui três arquivos principais: “app.component.html”, “app.component.css” e “app.component.ts”.
- Para este exemplo, o componente “app” atuará como o componente pai. Substitua todo o conteúdo em “app.component.html” pelo seguinte:
<div class="parent-component">
<h1> This is the parent component </h1>
</div> - Adicione um pouco de estilo ao componente do aplicativo pai em “app.component.css”:
.parent-component {
font-family: Arial, Helvetica, sans-serif;
background-color: lightcoral;
padding: 20px
} - Use o comando “ng generate component” para criar um novo componente Angular chamado “data-component”. Neste exemplo, “data-component” representará o componente filho.
ng g c data-component
- Adicione conteúdo ao componente filho em “data-component.component.html”. Substitua o conteúdo atual para adicionar um novo botão. Vincule o botão a uma função que será executada quando o usuário clicar nele:
<div class="child-component">
<p> This is the child component </p>
<button (click)="onButtonClick()">Click me</button>
</div> - Adicione um pouco de estilo ao componente filho em “data-component.component.css”:
.child-component {
font-family: Arial, Helvetica, sans-serif;
background-color: lightblue;
margin: 20px;
padding: 20px
} - Adicione a função onButtonClick() ao arquivo TypeScript do componente, em “data-component.component.ts”:
onButtonClick() {
} - Ainda dentro do arquivo TypeScript, adicione “Output” e “EventEmitter” na lista de importações:
import { Component, Output, EventEmitter, OnInit } from '@angular/core';
- Dentro da classe DataComponentComponent, declare uma variável Output para o componente chamada “buttonWasClicked”. Este será um EventEmitter. Um EventEmitter é uma classe interna que permite informar outro componente quando um evento ocorre.
export class DataComponentComponent implements OnInit {
@Output() buttonWasClicked = new EventEmitter<void>();
//. ..
} - Use o emissor do evento “buttonWasClicked” dentro da função onButtonClick(). Quando o usuário clicar no botão, o componente de dados enviará este evento para o componente de aplicativo pai.
onButtonClick() {
this.buttonWasClicked.emit();
}
Como ouvir eventos no componente filho do componente pai
Para usar a propriedade Output do componente filho, você precisará escutar o evento emitido do componente pai.
- Use o componente filho dentro de “app.component.html”. Você pode adicionar a saída “buttonWasClicked” como uma propriedade ao criar a tag HTML. Vincule o evento a uma nova função.
<app-data-component (buttonWasClicked)="buttonInChildComponentWasClicked()"></app-data-component>
- Dentro de “app.component.ts”, adicione a nova função para tratar o evento de clique do botão quando ele ocorrer no componente filho. Crie uma mensagem quando o usuário clicar no botão.
message: string = ""
buttonInChildComponentWasClicked() {
this.message = 'The button in the child component was clicked';
} - Exiba a mensagem em “app.component.html”:
<p>{{message}}</p>
- Digite o comando “ng serve” em um terminal para executar seu aplicativo Angular. Abra-o em um navegador da Web em localhost:4200. Os componentes pai e filho usam cores de fundo diferentes para facilitar a distinção entre eles.
- Clique no botão Clique em mim . O componente filho enviará o evento ao componente pai, que exibirá a mensagem.
Como enviar dados de um componente filho para um componente pai
Você também pode enviar dados do componente filho para o componente pai.
- Em “data-component.component.ts”, adicione uma variável para armazenar uma lista de strings contendo alguns dados.
listOfPeople: string[] = ['Joey', 'John', 'James'];
- Modifique o tipo de retorno do emissor de evento buttonWasClicked. Altere de void para string[], para corresponder à lista de strings que você declarou na etapa anterior:
@Output() buttonWasClicked = new EventEmitter<string[]>();
- Modifique a função onButtonClick(). Ao enviar o evento para o componente pai, adicione os dados como um argumento na função emit():
onButtonClick() {
this.buttonWasClicked.emit(this.listOfPeople);
} - Em “app.component.html”, modifique a tag “app-data-component”. Adicione o “$event” na função buttonInChildComponentWasClicked(). Contém os dados enviados do componente filho.
<app-data-component (buttonWasClicked)="buttonInChildComponentWasClicked($event)"></app-data-component>
- Atualize a função em “app.component.ts” para adicionar o parâmetro para os dados:
buttonInChildComponentWasClicked(dataFromChild: string[]) {
this.message = 'The button in the child component was clicked';
} - Adicione uma nova variável chamada “data” para armazenar os dados provenientes do componente filho:
message: string = ""
data: string[] = []
buttonInChildComponentWasClicked(dataFromChild: string[]) {
this.message = 'The button in the child component was clicked';
this.data = dataFromChild;
} - Exiba os dados na página HTML:
<p>{{data.join(', ')}}</p>
- Digite o comando “ng serve” em um terminal para executar seu aplicativo Angular. Abra-o em um navegador da Web em localhost:4200.
- Clique no botão Clique em mim . O componente filho enviará os dados do componente filho para o componente pai.
Enviando dados para outros componentes usando o decorador de saída
Existem outros decoradores que você pode usar no Angular, como o decorador Input ou o decorador Component. Você pode aprender mais sobre como usar outros decoradores no Angular para simplificar seu código.
Deixe um comentário