Jak pracować z dekoratorami TypeScript w Angular

Dekoratory TypeScript to specjalny rodzaj deklaracji, który można dołączyć do klasy, metody, akcesora, właściwości lub parametru. W Angularze dekoratory zapewniają sposób dodawania metadanych do klas, co czyni je niezwykle wydajnymi w tworzeniu wielokrotnego użytku komponentów, usług i innych. Ten przewodnik wyjaśnia, jak pracować z dekoratorami TypeScript w Angularze, podając przykłady pomagające lepiej zrozumieć ich zastosowanie.

Czym są dekoratory TypeScript?

Dekoratory to funkcje, które modyfikują zachowanie klasy lub członka klasy. W Angularze dekoratory służą do definiowania komponentów, dyrektyw, potoków i wstrzykiwalnych usług. Zapewniają deklaratywny sposób stosowania metadanych do klasy, których Angular używa do różnych celów, takich jak tworzenie wystąpień komponentów lub wstrzykiwanie zależności.

Popularne dekoratory kątowe

Angular ma kilka wbudowanych dekoratorów używanych do różnych celów. Poniżej znajdują się najpopularniejsze dekoratory Angular:

  • @Component – Definiuje komponent Angulara.
  • @Directive – Definiuje dyrektywę Angulara.
  • @Pipe – Definiuje potok Angular.
  • @Injectable – Definiuje usługę, którą można wstrzykiwać do innych komponentów lub usług.
  • @Input – Dekoruje właściwość, aby uczynić ją wejściem wiążącym dane.
  • @Output – Dekoruje właściwość, aby uczynić ją wyjściem wiążącym zdarzenia.

Korzystanie z dekoratora @Component

Dekorator @Component służy do definiowania komponentu Angular. Dostarcza metadanych o komponencie, takich jak jego selektor, szablon, style i inne konfiguracje.

import { Component } from '@angular/core';

@Component({
  selector: 'app-hello-world',
  template: `<h1>Hello, World!</h1>`,
  styles: ['h1 { color: blue; }']
})
export class HelloWorldComponent { }

W tym przykładzie dekorator @Component definiuje prosty komponent z szablonem wyświetlającym „Hello, World!”. Selektor określa niestandardowy znacznik HTML, który ma być użyty dla tego komponentu.

Korzystanie z @Injectable Decorator

Dekorator @Injectable służy do definiowania klasy usługi, którą można wstrzykiwać do innych komponentów lub usług. Jest to istotna część systemu wstrzykiwania zależności Angulara.

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  getData() {
    return ['Angular', 'TypeScript', 'Decorators'];
  }
}

Tutaj dekorator @Injectable udostępnia usługę DataService na potrzeby wstrzykiwania zależności w całej aplikacji.

Korzystanie z dekoratorów @Input i @Output

Dekoratory @Input i @Output służą do tworzenia właściwości wejściowych i zdarzeń wyjściowych w komponentach Angular. Są powszechnie używane do komunikacji komponentów.

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!');
  }
}

W tym przykładzie dekorator @Input jest używany do przekazywania danych z komponentu nadrzędnego do komponentu podrzędnego. Dekorator @Output jest używany do wysyłania danych z komponentu podrzędnego z powrotem do komponentu nadrzędnego poprzez zdarzenie.

Tworzenie niestandardowych dekoratorów

W Angular można tworzyć niestandardowe dekoratory, aby dodać określone zachowanie lub metadane do klas, metod lub właściwości. Poniżej znajduje się przykład prostego dekoratora klasy:

function LogClass(constructor: Function) {
  console.log('Class Decorator called:', constructor);
}

@LogClass
class MyService {
  constructor() {
    console.log('MyService created');
  }
}

Tutaj funkcja LogClass jest niestandardowym dekoratorem, który loguje klasę do konsoli, gdy jest zdefiniowana. Zastosowanie @LogClass do MyService loguje komunikaty podczas jej tworzenia.

Wniosek

Dekoratory w Angularze zapewniają potężny sposób dodawania metadanych i zachowań do klas, metod, właściwości i parametrów. Zrozumienie, jak używać wbudowanych dekoratorów, takich jak @Component, @Injectable, @Input i @Output, jest niezbędne do efektywnego rozwoju Angulara. Ponadto można tworzyć niestandardowe dekoratory, aby spełnić określone potrzeby w aplikacji, dodając elastyczności do procesu rozwoju.