Como trabalhar com decoradores TypeScript em Angular
Decoradores TypeScript são um tipo especial de declaração que pode ser anexada a uma classe, método, acessador, propriedade ou parâmetro. No Angular, os decoradores fornecem uma maneira de adicionar metadados a classes, tornando-as altamente poderosas para criar componentes reutilizáveis, serviços e muito mais. Este guia explica como trabalhar com decoradores TypeScript no Angular, fornecendo exemplos para ajudar a entender melhor seu uso.
O que são decoradores TypeScript?
Decoradores são funções que modificam o comportamento de uma classe ou membro de classe. No Angular, decoradores são usados para definir componentes, diretivas, pipes e serviços injetáveis. Eles fornecem uma maneira declarativa de aplicar metadados a uma classe, que o Angular usa para vários propósitos, como criar instâncias de componentes ou injetar dependências.
Decoradores angulares comuns
Angular tem vários decoradores internos usados para diferentes propósitos. Abaixo estão os decoradores Angular mais comuns:
- @Component - Define um componente Angular.
- @Directive - Define uma diretiva Angular.
- @Pipe - Define um tubo angular.
- @Injectable - Define um serviço que pode ser injetado em outros componentes ou serviços.
- @Input - Decora uma propriedade para torná-la uma entrada de vinculação de dados.
- @Output - Decora uma propriedade para torná-la uma saída de associação de eventos.
Usando @Component Decorator
O decorador @Component
é usado para definir um componente Angular. Ele fornece metadados sobre o componente, como seu seletor, template, estilos e outras configurações.
import { Component } from '@angular/core';
@Component({
selector: 'app-hello-world',
template: `<h1>Hello, World!</h1>`,
styles: ['h1 { color: blue; }']
})
export class HelloWorldComponent { }
Neste exemplo, o decorador @Component
define um componente simples com um modelo exibindo "Hello, World!". O selector
especifica a tag HTML personalizada a ser usada para este componente.
Usando @Injectable Decorator
O decorador @Injectable
é usado para definir uma classe de serviço que pode ser injetada em outros componentes ou serviços. É uma parte essencial do sistema de injeção de dependência do Angular.
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class DataService {
getData() {
return ['Angular', 'TypeScript', 'Decorators'];
}
}
Aqui, o decorador @Injectable
torna o DataService
disponível para injeção de dependência em todo o aplicativo.
Usando decoradores @Input e @Output
Os decoradores @Input
e @Output
são usados para criar propriedades de entrada e eventos de saída em componentes Angular. Eles são comumente usados para comunicação de componentes.
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-child',
template: `
<p>{{ message }}</p>
<button (click)="sendMessage()">Send Message</button>
`
})
export class ChildComponent {
@Input() message: string;
@Output() messageEvent = new EventEmitter();
sendMessage() {
this.messageEvent.emit('Hello from Child Component!');
}
}
Neste exemplo, o decorador @Input
é usado para passar dados de um componente pai para um componente filho. O decorador @Output
é usado para enviar dados do componente filho de volta para o componente pai por meio de um evento.
Criando decoradores personalizados
Decoradores personalizados podem ser criados no Angular para adicionar comportamento específico ou metadados a classes, métodos ou propriedades. Abaixo está um exemplo de um decorador de classe simples:
function LogClass(constructor: Function) {
console.log('Class Decorator called:', constructor);
}
@LogClass
class MyService {
constructor() {
console.log('MyService created');
}
}
Aqui, a função LogClass
é um decorador personalizado que registra a classe no console quando ela é definida. Aplicar @LogClass
a MyService
registra mensagens durante sua criação.
Conclusão
Decoradores no Angular fornecem uma maneira poderosa de adicionar metadados e comportamento a classes, métodos, propriedades e parâmetros. Entender como usar decoradores integrados como @Component
, @Injectable
, @Input
e @Output
é essencial para o desenvolvimento Angular eficaz. Além disso, decoradores personalizados podem ser criados para atender a necessidades específicas em um aplicativo, adicionando flexibilidade ao processo de desenvolvimento.