Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Oprettelse af Brugerdefinerede Direktiver i Angular | Mastering Angular Directives and Pipes
Introduktion til Angular

bookOprettelse af Brugerdefinerede Direktiver i Angular

Angular leveres med et sæt indbyggede direktiver som ngIf, ngFor og ngClass. Du kan dog også oprette dine egne brugerdefinerede direktiver til at håndtere specifikke opgaver i din applikation. Lad os gennemgå, hvordan man bygger et med et praktisk eksempel.

Generér det brugerdefinerede direktiv

Det er god praksis at organisere din kode ved at oprette en dedikeret mappe til dine direktiver. Lad os kalde den directives.

Denne kommando opretter en ny mappe med navnet directives inde i app-mappen og tilføjer den nye direktivfil deri:

  • highlight-on-complete.directive.ts – indeholder direktivets logik;

  • highlight-on-complete.directive.spec.ts – enhedstestfil (kan slettes, hvis den ikke er nødvendig).

Her er, hvordan den grundlæggende struktur for direktivet ser ud:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definer, hvad direktivet skal gøre

Dette direktiv vil fremhæve et opgaveelement i grønt, hvis det er markeret som fuldført. Ellers fjernes stilen.

For at fortælle Angular, at denne klasse er et direktiv, dekoreres den med @Directive:

@Directive({
  selector: '[appHighlightOnComplete]'
})

Selektoren [appHighlightOnComplete] betyder, at direktivet vil blive brugt som et attribut, ikke som et tag eller strukturelt direktiv.

I din HTML anvendes det således:

<div [appHighlightOnComplete]="task.completed"></div>

Få direktivet til at reagere på ændringer

For at registrere ændringer på completed-input implementeres OnChanges-interfacet:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Vi definerer også en input-egenskab til at modtage værdien fra komponenten:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Hvad dette gør:

  • Informerer Angular om, at værdien vil blive leveret fra skabelonen (tidligere sendte vi task.complete fra skabelonen);

  • Binder direktivets interne completed-egenskab til den værdi, der sendes ind fra skabelonen;

  • Angiver en standardværdi på true (som vil blive overskrevet, når de faktiske data modtages).

Sikker adgang til DOM'en

Angular bruger afhængighedsinjektion til at give adgang til DOM'en og renderingsværktøjer.

I konstruktøren injicerer vi:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef giver os en reference til værtens DOM-element. Renderer2 gør det muligt sikkert at ændre stilarter og attributter uden at manipulere DOM'en direkte.

Reagér på ændringer med ngOnChanges

Nu implementerer vi hovedlogikken i ngOnChanges, som kører, hver gang inputværdien ændres.

Fuld implementering:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Metoden ngOnChanges aktiveres, når Angular registrerer ændringer i direktivets input-egenskaber.

I dette tilfælde reagerer den på opdateringer af værdien completed, som overføres fra skabelonen. Hvis completed er true, tilføjer direktivet en grøn kant og en lysegrøn baggrund til elementet. Hvis den er false, fjernes disse stilarter, og elementet vender tilbage til dets oprindelige udseende. Dette giver en visuel indikation af fuldførte opgaver.

Dette brugerdefinerede direktiv gør det muligt at indkapsle stiladfærd på en genanvendelig og overskuelig måde. Du kan nu anvende det på ethvert element i din app uden at duplikere logik på tværs af komponenter. Det er et godt eksempel på, hvordan Angulars direktivsystem kan hjælpe dig med at skrive mere modulær og vedligeholdelsesvenlig kode.

question mark

Hvad gør direktivet highlight-on-complete?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

bookOprettelse af Brugerdefinerede Direktiver i Angular

Angular leveres med et sæt indbyggede direktiver som ngIf, ngFor og ngClass. Du kan dog også oprette dine egne brugerdefinerede direktiver til at håndtere specifikke opgaver i din applikation. Lad os gennemgå, hvordan man bygger et med et praktisk eksempel.

Generér det brugerdefinerede direktiv

Det er god praksis at organisere din kode ved at oprette en dedikeret mappe til dine direktiver. Lad os kalde den directives.

Denne kommando opretter en ny mappe med navnet directives inde i app-mappen og tilføjer den nye direktivfil deri:

  • highlight-on-complete.directive.ts – indeholder direktivets logik;

  • highlight-on-complete.directive.spec.ts – enhedstestfil (kan slettes, hvis den ikke er nødvendig).

Her er, hvordan den grundlæggende struktur for direktivet ser ud:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definer, hvad direktivet skal gøre

Dette direktiv vil fremhæve et opgaveelement i grønt, hvis det er markeret som fuldført. Ellers fjernes stilen.

For at fortælle Angular, at denne klasse er et direktiv, dekoreres den med @Directive:

@Directive({
  selector: '[appHighlightOnComplete]'
})

Selektoren [appHighlightOnComplete] betyder, at direktivet vil blive brugt som et attribut, ikke som et tag eller strukturelt direktiv.

I din HTML anvendes det således:

<div [appHighlightOnComplete]="task.completed"></div>

Få direktivet til at reagere på ændringer

For at registrere ændringer på completed-input implementeres OnChanges-interfacet:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Vi definerer også en input-egenskab til at modtage værdien fra komponenten:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Hvad dette gør:

  • Informerer Angular om, at værdien vil blive leveret fra skabelonen (tidligere sendte vi task.complete fra skabelonen);

  • Binder direktivets interne completed-egenskab til den værdi, der sendes ind fra skabelonen;

  • Angiver en standardværdi på true (som vil blive overskrevet, når de faktiske data modtages).

Sikker adgang til DOM'en

Angular bruger afhængighedsinjektion til at give adgang til DOM'en og renderingsværktøjer.

I konstruktøren injicerer vi:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef giver os en reference til værtens DOM-element. Renderer2 gør det muligt sikkert at ændre stilarter og attributter uden at manipulere DOM'en direkte.

Reagér på ændringer med ngOnChanges

Nu implementerer vi hovedlogikken i ngOnChanges, som kører, hver gang inputværdien ændres.

Fuld implementering:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Metoden ngOnChanges aktiveres, når Angular registrerer ændringer i direktivets input-egenskaber.

I dette tilfælde reagerer den på opdateringer af værdien completed, som overføres fra skabelonen. Hvis completed er true, tilføjer direktivet en grøn kant og en lysegrøn baggrund til elementet. Hvis den er false, fjernes disse stilarter, og elementet vender tilbage til dets oprindelige udseende. Dette giver en visuel indikation af fuldførte opgaver.

Dette brugerdefinerede direktiv gør det muligt at indkapsle stiladfærd på en genanvendelig og overskuelig måde. Du kan nu anvende det på ethvert element i din app uden at duplikere logik på tværs af komponenter. Det er et godt eksempel på, hvordan Angulars direktivsystem kan hjælpe dig med at skrive mere modulær og vedligeholdelsesvenlig kode.

question mark

Hvad gør direktivet highlight-on-complete?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 4
some-alt