Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Skapa Egna Direktiver i Angular | Mastering Angular Directives and Pipes
Introduktion till Angular

bookSkapa Egna Direktiver i Angular

Angular levereras med en uppsättning inbyggda direktiv som ngIf, ngFor och ngClass. Du kan dock även skapa egna anpassade direktiv för att hantera specifika uppgifter i din applikation. Här går vi igenom hur du bygger ett sådant med ett praktiskt exempel.

Generera det anpassade direktivet

Det är god praxis att organisera din kod genom att skapa en dedikerad mapp för dina direktiv. Låt oss kalla den directives.

Detta kommando skapar en ny mapp med namnet directives i katalogen app och lägger till den nya direktivfilen i den:

  • highlight-on-complete.directive.ts – innehåller direktivets logik;

  • highlight-on-complete.directive.spec.ts – enhetstestfil (kan tas bort om den inte behövs).

Här är hur den grundläggande strukturen för direktivet ser ut:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definiera vad direktivet ska göra

Detta direktiv markerar ett uppgiftselement i grönt om det är markerat som slutfört. Annars tas stilarna bort.

För att tala om för Angular att denna klass är ett direktiv, dekoreras den med @Directive:

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

Selektorn [appHighlightOnComplete] innebär att direktivet kommer att användas som ett attribut, inte som en tagg eller strukturellt direktiv.

I din HTML tillämpar du det så här:

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

Få direktivet att reagera på förändringar

För att upptäcka förändringar i completed-ingången implementerar vi OnChanges-gränssnittet:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Vi definierar också en input-egenskap för att ta emot värdet från komponenten:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Vad detta gör:

  • Informerar Angular om att värdet kommer att tillhandahållas från mallen (tidigare skickade vi task.complete från mallen);

  • Binder direktivets interna completed-egenskap till värdet som skickas in från mallen;

  • Anger ett standardvärde på true (vilket kommer att skrivas över när faktisk data tas emot).

Säker åtkomst till DOM

Angular använder beroendeinjektion för att ge åtkomst till DOM och renderingsverktyg.

I konstruktorn injicerar vi:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef ger oss en referens till värd-HTML-elementet. Renderer2 gör det möjligt att säkert ändra stilar och attribut utan att direkt manipulera DOM:en.

Reagera på förändringar med ngOnChanges

Nu implementerar vi huvudlogiken i ngOnChanges, som körs varje gång inmatningsvärdet ändras.

Fullständig implementation:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Metoden ngOnChanges utlöses när Angular upptäcker förändringar i direktivets input-egenskaper.

I detta fall reagerar den på uppdateringar av värdet completed som skickas från mallen. Om completed är true lägger direktivet till en grön ram och en ljusgrön bakgrund på elementet. Om det är false tas dessa stilar bort, vilket återställer elementets ursprungliga utseende. Detta ger en visuell indikation på slutförda uppgifter.

Detta anpassade direktiv låter dig kapsla in stilbeteende på ett återanvändbart och rent sätt. Du kan nu använda det på valfritt element i din app utan att duplicera logik mellan komponenter. Det är ett utmärkt exempel på hur Angulars direktivsystem hjälper dig att skriva mer modulär och underhållbar kod.

question mark

Vad gör direktivet highlight-on-complete?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

bookSkapa Egna Direktiver i Angular

Angular levereras med en uppsättning inbyggda direktiv som ngIf, ngFor och ngClass. Du kan dock även skapa egna anpassade direktiv för att hantera specifika uppgifter i din applikation. Här går vi igenom hur du bygger ett sådant med ett praktiskt exempel.

Generera det anpassade direktivet

Det är god praxis att organisera din kod genom att skapa en dedikerad mapp för dina direktiv. Låt oss kalla den directives.

Detta kommando skapar en ny mapp med namnet directives i katalogen app och lägger till den nya direktivfilen i den:

  • highlight-on-complete.directive.ts – innehåller direktivets logik;

  • highlight-on-complete.directive.spec.ts – enhetstestfil (kan tas bort om den inte behövs).

Här är hur den grundläggande strukturen för direktivet ser ut:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definiera vad direktivet ska göra

Detta direktiv markerar ett uppgiftselement i grönt om det är markerat som slutfört. Annars tas stilarna bort.

För att tala om för Angular att denna klass är ett direktiv, dekoreras den med @Directive:

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

Selektorn [appHighlightOnComplete] innebär att direktivet kommer att användas som ett attribut, inte som en tagg eller strukturellt direktiv.

I din HTML tillämpar du det så här:

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

Få direktivet att reagera på förändringar

För att upptäcka förändringar i completed-ingången implementerar vi OnChanges-gränssnittet:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Vi definierar också en input-egenskap för att ta emot värdet från komponenten:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Vad detta gör:

  • Informerar Angular om att värdet kommer att tillhandahållas från mallen (tidigare skickade vi task.complete från mallen);

  • Binder direktivets interna completed-egenskap till värdet som skickas in från mallen;

  • Anger ett standardvärde på true (vilket kommer att skrivas över när faktisk data tas emot).

Säker åtkomst till DOM

Angular använder beroendeinjektion för att ge åtkomst till DOM och renderingsverktyg.

I konstruktorn injicerar vi:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef ger oss en referens till värd-HTML-elementet. Renderer2 gör det möjligt att säkert ändra stilar och attribut utan att direkt manipulera DOM:en.

Reagera på förändringar med ngOnChanges

Nu implementerar vi huvudlogiken i ngOnChanges, som körs varje gång inmatningsvärdet ändras.

Fullständig implementation:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Metoden ngOnChanges utlöses när Angular upptäcker förändringar i direktivets input-egenskaper.

I detta fall reagerar den på uppdateringar av värdet completed som skickas från mallen. Om completed är true lägger direktivet till en grön ram och en ljusgrön bakgrund på elementet. Om det är false tas dessa stilar bort, vilket återställer elementets ursprungliga utseende. Detta ger en visuell indikation på slutförda uppgifter.

Detta anpassade direktiv låter dig kapsla in stilbeteende på ett återanvändbart och rent sätt. Du kan nu använda det på valfritt element i din app utan att duplicera logik mellan komponenter. Det är ett utmärkt exempel på hur Angulars direktivsystem hjälper dig att skriva mer modulär och underhållbar kod.

question mark

Vad gör direktivet highlight-on-complete?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4
some-alt