Hvordan jobbe med TypeScript-dekoratorer i Angular

TypeScript-dekoratorer er en spesiell type erklæring som kan knyttes til en klasse, metode, aksessorder, egenskap eller parameter. I Angular gir dekoratører en måte å legge til metadata til klasser, noe som gjør dem svært kraftige for å lage gjenbrukbare komponenter, tjenester og mer. Denne veiledningen forklarer hvordan du arbeider med TypeScript-dekoratorer i Angular, og gir eksempler for å hjelpe deg med å forstå bruken deres bedre.

Hva er TypeScript-dekoratører?

Dekoratører er funksjoner som endrer oppførselen til en klasse eller et klassemedlem. I Angular brukes dekoratører til å definere komponenter, direktiver, rør og injiserbare tjenester. De gir en deklarativ måte å bruke metadata på en klasse, som Angular bruker til forskjellige formål, for eksempel å lage forekomster av komponenter eller injisere avhengigheter.

Vanlige vinkeldekoratorer

Angular har flere innebygde dekoratorer som brukes til ulike formål. Nedenfor er de vanligste vinkeldekoratørene:

  • @Component - Definerer en vinkelkomponent.
  • @Directive - Definerer et vinkeldirektiv.
  • @Rør - Definerer et vinkelrør.
  • @Injectable - Definerer en tjeneste som kan injiseres i andre komponenter eller tjenester.
  • @Input – Dekorerer en egenskap for å gjøre den til en databindende inngang.
  • @Output – Dekorerer en egenskap for å gjøre den til en hendelsesbindende utgang.

Bruker @Component Decorator

@Component dekorator brukes til å definere en vinkelkomponent. Den gir metadata om komponenten, for eksempel dens velger, mal, stiler og andre konfigurasjoner.

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

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

I dette eksemplet definerer @Component dekoratoren en enkel komponent med en mal som viser "Hello, World!". velgeren spesifiserer den egendefinerte HTML-koden som skal brukes for denne komponenten.

Bruker @Injectable Decorator

@Injectable dekoratoren brukes til å definere en serviceklasse som kan injiseres i andre komponenter eller tjenester. Det er en viktig del av Angulars avhengighetsinjeksjonssystem.

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

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

Her gjør @Injectable dekoratøren DataService tilgjengelig for avhengighetsinjeksjon gjennom hele applikasjonen.

Bruke @Input og @Output dekoratorer

@Input og @Output dekoratorene brukes til å lage inngangsegenskaper og utdatahendelser i Angular-komponenter. De brukes ofte til komponentkommunikasjon.

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

I dette eksemplet brukes @Input dekoratoren til å overføre data fra en overordnet komponent til en underordnet komponent. @Output dekoratoren brukes til å sende data fra den underordnede komponenten tilbake til den overordnede komponenten gjennom en hendelse.

Opprette tilpassede dekoratører

Egendefinerte dekoratører kan opprettes i Angular for å legge til spesifikk atferd eller metadata til klasser, metoder eller egenskaper. Nedenfor er et eksempel på en enkel klassedekoratør:

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

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

Her er LogClass-funksjonen en tilpasset dekorator som logger klassen til konsollen når den er definert. Ved å bruke @LogClassMyService logges meldinger under opprettelsen.

Konklusjon

Dekoratorer i Angular gir en kraftig måte å legge til metadata og atferd til klasser, metoder, egenskaper og parametere. Å forstå hvordan du bruker innebygde dekoratorer som @Component, @Injectable, @Input og @Output er avgjørende for effektiv Angular utvikling. I tillegg kan tilpassede dekoratører lages for å møte spesifikke behov i en applikasjon, noe som gir fleksibilitet til utviklingsprosessen.