Як працювати з декораторами TypeScript в Angular

Декоратори TypeScript — це особливий вид декларацій, які можна приєднати до класу, методу, засобу доступу, властивості або параметра. В Angular декоратори надають можливість додавати метадані до класів, що робить їх надзвичайно потужними для створення повторно використовуваних компонентів, служб тощо. Цей посібник пояснює, як працювати з декораторами TypeScript в Angular, надаючи приклади, щоб краще зрозуміти їх використання.

Що таке декоратори TypeScript?

Декоратори — це функції, які змінюють поведінку класу або члена класу. В Angular декоратори використовуються для визначення компонентів, директив, каналів і ін’єкційних сервісів. Вони забезпечують декларативний спосіб застосування метаданих до класу, який Angular використовує для різних цілей, таких як створення екземплярів компонентів або впровадження залежностей.

Поширені кутові декоратори

У Angular є кілька вбудованих декораторів, які використовуються для різних цілей. Нижче представлені найпоширеніші кутові декоратори:

  • @Component – визначає компонент Angular.
  • @Directive - визначає директиву Angular.
  • @Pipe - Визначає кутову трубу.
  • @Injectable – визначає службу, яку можна вставити в інші компоненти чи служби.
  • @Input – прикрашає властивість, щоб зробити її входом для зв’язування даних.
  • @Output — прикрашає властивість, щоб зробити її виводом, що прив’язує події.

Використання @Component Decorator

Декоратор @Component використовується для визначення компонента Angular. Він надає метадані про компонент, наприклад його селектор, шаблон, стилі та інші конфігурації.

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

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

У цьому прикладі декоратор @Component визначає простий компонент із шаблоном, що відображає «Hello, World!». Селектор визначає спеціальний тег HTML для використання для цього компонента.

Використання @Injectable Decorator

Декоратор @Injectable використовується для визначення класу обслуговування, який можна впроваджувати в інші компоненти або служби. Це невід’ємна частина системи ін’єкції залежностей Angular.

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

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

Тут декоратор @Injectable робить DataService доступним для ін’єкції залежностей у всій програмі.

Використання декораторів @Input і @Output

Декоратори @Input і @Output використовуються для створення вхідних властивостей і вихідних подій у компонентах Angular. Вони зазвичай використовуються для комунікації компонентів.

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

У цьому прикладі декоратор @Input використовується для передачі даних від батьківського компонента до дочірнього компонента. Декоратор @Output використовується для надсилання даних із дочірнього компонента назад до батьківського через подію.

Створення індивідуальних декораторів

Спеціальні декоратори можна створити в Angular, щоб додати певну поведінку або метадані до класів, методів або властивостей. Нижче наведено приклад простого декоратора класу:

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

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

Тут функція LogClass є спеціальним декоратором, який записує клас на консоль, коли він визначений. Застосування @LogClass до MyService журналює повідомлення під час його створення.

Висновок

Декоратори в Angular надають потужний спосіб додавати метадані та поведінку до класів, методів, властивостей і параметрів. Розуміння того, як використовувати такі вбудовані декоратори, як @Component, @Injectable, @Input і @Output, є важливим для ефективного Angular розвитку. Крім того, можна створювати спеціальні декоратори для задоволення конкретних потреб програми, додаючи гнучкості процесу розробки.