What angular features can a developer use in a template?

Mestring af Angular Skabeloner: En Dybdegående Guide

01/01/2026

Rating: 4.47 (15554 votes)

I hjertet af enhver moderne webapplikation ligger en effektiv måde at vise og interagere med data på. Når det kommer til Angular, er skabeloner (templates) den magiske bro mellem din applikations logik og det, brugerne ser og interagerer med. De er ikke bare statisk HTML; de er dynamiske lærreder, der bringes til live med kraftfulde Angular-funktioner. Disse funktioner giver udviklere mulighed for at skabe rige, interaktive brugergrænseflader, der reagerer på data og brugerinput i realtid. Lad os dykke ned i de essentielle Angular-funktioner, du kan udnytte direkte i dine skabeloner for at bygge fantastiske weboplevelser.

What angular features can a developer use in a template?
Within the Templates, developers can use Angular features such as data binding, loops, and conditionals based on user interaction and data patterns. For example, in a template, a list of items is shown like this: Here, the *ngFor directive tells Angular to loop over a list of items and display each item's name property.
Indholdsfortegnelse

Hvad er Angular Skabeloner, og Hvorfor er de Vigtige?

Angular skabeloner er i bund og grund HTML-filer med særlige Angular-direktiver og bindingssyntaks indlejret. De definerer, hvordan din applikations brugergrænseflade skal se ud. Hver Angular-komponent har en tilknyttet skabelon, der bestemmer, hvad der skal gengives på skærmen, når komponenten er aktiv. Det, der gør Angular skabeloner så utroligt kraftfulde, er deres evne til at være dynamiske. Forestil dig at bygge en app, hvor en liste over produkter skal opdateres, så snart nye varer tilføjes til din butik, eller hvor en knap kun skal vises, hvis en bruger er logget ind. Dette er præcis, hvad Angular skabelonfunktioner muliggør – de tillader dig at manipulere DOM (Document Object Model) baseret på din applikations tilstand og data, uden at skulle skrive manuel JavaScript-kode for hver eneste ændring.

Uden disse funktioner ville udviklere skulle skrive komplekse og fejludsatte JavaScript-koder for at manipulere HTML-elementer direkte, hver gang data ændres eller en bruger interagerer. Angulars skabelonsprog abstraherer denne kompleksitet væk, hvilket gør det nemmere at bygge og vedligeholde store, skalerbare applikationer. De sikrer en klar adskillelse af bekymringer: din komponenthåndterer logikken, og din skabelon håndterer præsentationen.

Datatilknytning (Data Binding): Broen Mellem Data og UI

Datatilknytning er rygraden i Angulars reaktive arkitektur. Det er den mekanisme, der forbinder din komponents data (i TypeScript-klassen) med din skabelons HTML-elementer. Angular tilbyder flere typer datatilknytning, hver især designet til specifikke scenarier.

1. Interpolation (Strenginterpolation) - {{ property }}

Interpolation er den mest grundlæggende form for datatilknytning og bruges til at vise komponentens egenskabsværdier som tekst i HTML. Du indkapsler blot egenskabsnavnet i dobbelte krøllede parenteser. Angular evaluerer udtrykket mellem parenteserne og konverterer resultatet til en streng, der derefter indsættes i DOM'en.

<p>Velkommen, {{ brugernavn }}!</p> <p>Antal varer i kurven: {{ antalVarer }}</p>

Hvis brugernavn i din komponent er 'Anna' og antalVarer er 5, vil outputtet være:

<p>Velkommen, Anna!</p> <p>Antal varer i kurven: 5</p>

Dette er en envejsbinding, hvor data flyder fra komponenten til skabelonen.

2. Egenskabstilknytning (Property Binding) - [property]="expression"

Egenskabstilknytning bruges til at indstille en HTML-elements egenskaber (som src for et billede, disabled for en knap eller value for et inputfelt) til en værdi fra din komponent. I stedet for at indsætte tekst, binder du direkte til DOM-elementets egenskaber. Dette er også en envejsbinding fra komponent til skabelon.

<img [src]="billedURL" [alt]="billedTekst"> <button [disabled]="erKnapDeaktiveret">Klik mig</button> <input type="text" [value]="forudfyldtTekst">

Her vil billedURL, billedTekst, erKnapDeaktiveret og forudfyldtTekst være egenskaber defineret i din komponentklasse.

3. Begivenhedstilknytning (Event Binding) - (event)="statement"

Begivenhedstilknytning giver dig mulighed for at reagere på begivenheder udløst af brugeren (f.eks. klik, tastetryk, indsendelse af formularer) eller af andre elementer i DOM'en. Når en begivenhed indtræffer, udføres en metode i din komponentklasse.

<button (click)="gemData()">Gem</button> <input type="text" (input)="opdaterSøgeterm($event.target.value)">

I eksemplet med (input) giver $event dig adgang til begivenhedsobjektet, som indeholder information om den udløste begivenhed.

4. Tovejs Datatilknytning (Two-Way Data Binding) - [(ngModel)]="property"

Tovejs datatilknytning kombinerer egenskabs- og begivenhedstilknytning, hvilket giver en bekvem måde at opnå synkronisering mellem en inputfeltværdi i skabelonen og en egenskab i komponenten. Når brugeren ændrer værdien i inputfeltet, opdateres komponentens egenskab automatisk, og når komponentens egenskab ændres, opdateres inputfeltet også.

For at bruge [(ngModel)] skal du importere FormsModule i din Angular-modul.

<input type="text" [(ngModel)]="brugernavnInput"> <p>Indtastet navn: {{ brugernavnInput }}</p>

Denne type binding er især nyttig i formularer, hvor du hurtigt skal læse og skrive tilgang til brugerinput.

Her er en oversigt over de forskellige datatilknytningsmetoder:

Type af BindingSyntaksRetning af DataflowAnvendelse
Interpolation{{ expression }}Komponent → SkabelonVisning af tekstbaseret data
Egenskabstilknytning[property]="expression"Komponent → SkabelonIndstilling af HTML-egenskaber (f.eks. src, disabled)
Begivenhedstilknytning(event)="statement"Skabelon → KomponentReaktion på DOM-begivenheder (f.eks. click, input)
Tovejs Datatilknytning[(ngModel)]="property"Komponent ↔ SkabelonSynkronisering af inputfelter i formularer

Gentagelser med *ngFor: Visning af Lister

En af de mest almindelige opgaver i webudvikling er at vise lister af elementer – det kunne være en liste over produkter, kommentarer, brugere eller menupunkter. Angulars *ngFor strukturdirektiv gør dette utroligt nemt og effektivt. Det fortæller Angular, at det skal iterere over en samling (f.eks. et array) og skabe en DOM-struktur for hvert element i samlingen.

Syntaksen for *ngFor ligner en for...of løkke i JavaScript:

<ul> <li *ngFor="let vare of varer"> {{ vare.navn }} - {{ vare.pris | currency:'DKK':'symbol':'1.2-2' }} </li> </ul>

I dette eksempel vil *ngFor iterere over varer-arrayet, og for hver vare vil den oprette et <li> element, der viser varens navn og pris. Den | currency del er en Angular pipe, som vi kort berører senere, der formaterer prisen.

Lokale Variabler i *ngFor

*ngFor giver adgang til flere nyttige lokale variabler inden for løkken, som kan give yderligere kontekst om det aktuelle element:

  • index: Den nulbaserede indeks for det aktuelle element.
  • first: En boolean-værdi, der er true, hvis det er det første element i iterationen.
  • last: En boolean-værdi, der er true, hvis det er det sidste element i iterationen.
  • even: En boolean-værdi, der er true, hvis indekset er et lige tal.
  • odd: En boolean-værdi, der er true, hvis indekset er et ulige tal.
<ul> <li *ngFor="let bruger of brugere; let i = index; let isFirst = first"> <span>{{ i + 1 }}. {{ bruger.navn }}</span> <span *ngIf="isFirst"> (Første bruger!)</span> </li> </ul>

Disse variabler er utroligt nyttige til at anvende specifik styling eller logik til bestemte elementer i en liste.

Her er en oversigt over *ngFor lokale variabler:

VariabelBeskrivelseEksempel
indexNulbaseret indeks af det aktuelle element.<span>{{ i + 1 }}</span> for nummerering
firsttrue for det første element.<div *ngIf="isFirst">
lasttrue for det sidste element.<div *ngIf="isLast">
eventrue for elementer med lige indeks.<li [ngClass]="{ 'even-row': isEven }">
oddtrue for elementer med ulige indeks.<li [ngClass]="{ 'odd-row': isOdd }">

Betinget Indhold med *ngIf og [ngSwitch]

Ofte skal du kun vise bestemte dele af din skabelon, hvis en bestemt betingelse er opfyldt. Angular tilbyder kraftfulde strukturdirektiver til at håndtere dette: *ngIf og [ngSwitch].

1. *ngIf: Visning eller Skjulning af Elementer

*ngIf er det mest brugte direktiv til betinget gengivelse. Hvis udtrykket i *ngIf evalueres til true, tilføjes elementet til DOM'en; hvis det er false, fjernes elementet fuldstændigt fra DOM'en. Dette er en vigtig forskel fra blot at skjule et element med CSS (f.eks. med display: none), da *ngIf sparer ressourcer ved ikke at gengive unødvendige elementer.

<div *ngIf="erLoggetInd"> <p>Velkommen tilbage, bruger!</p> <button>Log ud</button> </div> <div *ngIf="!erLoggetInd"> <p>Log ind for at få adgang.</p> <button>Log ind</button> </div>

Du kan også bruge en else-blok med *ngIf ved hjælp af ng-template. Dette er nyttigt, når du har to alternative visninger baseret på den samme betingelse.

<div *ngIf="harAdgang; else ingenAdgangBlok"> <p>Du har adgang til premium indhold.</p> </div> <ng-template #ingenAdgangBlok> <p>Du har ikke adgang. Opgrader dit abonnement.</p> </ng-template>

ng-template er et Angular-element, der ikke gengives i DOM'en som standard, men bruges som en skabelon for Angular at gengive betinget.

2. [ngSwitch], *ngSwitchCase og *ngSwitchDefault: Flere Betingelser

Når du har flere betingelser, der skal tjekkes mod en enkelt værdi, er [ngSwitch] et mere elegant og læsbart alternativ til indlejrede *ngIf-udsagn. Det fungerer som en switch-sætning i traditionel programmering.

<div [ngSwitch]="status"> <div *ngSwitchCase="'pending'">Din ordre afventer godkendelse.</div> <div *ngSwitchCase="'approved'">Din ordre er godkendt og afsendt!</div> <div *ngSwitchCase="'rejected'">Desværre blev din ordre afvist.</div> <div *ngSwitchDefault>Ukendt status.</div> </div>

Her vil indholdet af det relevante div-element blive vist baseret på værdien af status-egenskaben i din komponent.

Sammenligning af *ngIf og [ngSwitch]:

DirektivAnvendelseFordeleUlemper/Overvejelser
*ngIfViser/skjuler elementer baseret på en enkelt boolean-betingelse.Simpelt, fjerner elementer fra DOM, understøtter else-blok.Kan blive rodet med mange indlejrede betingelser.
[ngSwitch]Viser forskellige indhold baseret på en enkelt værdis match med flere tilfælde.Mere læseligt for komplekse, multiple betingelser, bedre ydeevne end mange indlejrede *ngIf'er for samme værdi.Kræver en ydre [ngSwitch] container, mindre fleksibel end *ngIf for ikke-match-baserede betingelser.

Avancerede Skabelonfunktioner, der Forbedrer UI

Udover de fundamentale funktioner er der andre kraftfulde værktøjer, der kan forbedre dine Angular skabeloner yderligere.

Pipes: Transformation af Data for Visning

Pipes er en fantastisk måde at transformere data direkte i din skabelon uden at ændre den underliggende data i din komponent. De bruges til formatering, filtrering, sortering og andre datamanipulationer.

<p>Dagens dato: {{ dagensDato | date:'fullDate' }}</p> <p>Valuta: {{ pris | currency:'EUR':'symbol':'1.2-2' }}</p> <p>JSON Data: {{ komplekstObjekt | json }}</p>

Angular leveres med en række indbyggede pipes som DatePipe, CurrencyPipe, DecimalPipe, LowerCasePipe, UpperCasePipe, JsonPipe og SlicePipe. Du kan også oprette dine egne brugerdefinerede pipes for specifikke behov.

Skabelon Reference Variabler (#variabelNavn)

Skabelon reference variabler giver dig en måde at få direkte adgang til et DOM-element, en komponent eller et direktiv inden for din skabelon. De er utroligt nyttige til at interagere med elementer, f.eks. at hente værdien af et inputfelt eller kalde en metode på en underkomponent.

<input #mitInput type="text" placeholder="Indtast tekst"> <button (click)="visInputVærdi(mitInput.value)">Vis Værdi</button>

Her kan mitInput bruges i andre dele af skabelonen eller sendes som et argument til en komponentmetode.

Attributdirektiver ([ngClass], [ngStyle])

Attributdirektiver ændrer udseendet eller opførslen af et DOM-element. [ngClass] og [ngStyle] er to almindelige eksempler, der giver dig mulighed for dynamisk at anvende CSS-klasser og stilarter.

<div [ngClass]="{ 'highlight': erAktiv, 'error-text': harFejl }"> Dette tekst er dynamisk styret. </div> <p [ngStyle]="{ 'color': tekstFarve, 'font-size.px': skriftStørrelse }"> Stilfuld tekst. </p>

Disse direktiver er yderst fleksible og kan tage objekter, arrays eller betingede udtryk for at anvende stilarter baseret på din applikations tilstand.

Hvorfor er Disse Funktioner Vigtige for Enhver Udvikler?

Mestring af disse Angular skabelonfunktioner er ikke bare en teknisk detalje; det er afgørende for at bygge moderne, effektive og brugervenlige webapplikationer. Her er hvorfor:

  • Dynamisk og Interaktiv Brugergrænseflade: De tillader dig at skabe UI'er, der reagerer i realtid på brugerinput og dataændringer, hvilket giver en flydende og engagerende brugeroplevelse.
  • Kode Genanvendelse: Ved at bruge direktiver og bindingssyntaks kan du oprette genanvendelige komponenter og skabelonfragmenter, der mindsker mængden af gentagen kode.
  • Forbedret Læsbarhed og Vedligeholdelse: Angulars deklarative tilgang gør skabeloner nemmere at læse og forstå. Den adskiller præsentationslogikken fra forretningslogikken, hvilket gør det lettere at vedligeholde og fejlfinde applikationer.
  • Ydeevneoptimering: Strukturdirektiver som *ngIf fjerner elementer fra DOM'en, når de ikke er nødvendige, hvilket kan forbedre applikationens ydeevne ved at reducere den mængde arbejde, browseren skal udføre.
  • Reduktion af Manuel DOM-Manipulation: Du undgår at skrive imperativ JavaScript-kode for direkte at manipulere DOM'en, hvilket er en almindelig kilde til fejl og vanskeligheder i større projekter.

Ofte Stillede Spørgsmål (FAQ)

Kan jeg bruge almindelig JavaScript direkte i Angular skabeloner?
Nej, du kan ikke skrive vilkårlig JavaScript-kode direkte i dine Angular skabeloner. Skabelonudtryk er begrænset til enkelte JavaScript-udtryk, der evaluerer til en værdi (f.eks. property.name, method(), a + b). Kompleks logik skal placeres i komponentens TypeScript-klasse.
Hvad er forskellen mellem *ngIf og at bruge [hidden]="true"?
Forskellen er afgørende for ydeevnen. *ngIf er et strukturdirektiv, der betinget tilføjer eller fjerner et element (og dets underordnede) fra DOM'en. Hvis betingelsen er falsk, eksisterer elementet simpelthen ikke i browserens gengivne træ. [hidden]="true" er derimod en attributbinding, der blot anvender CSS-egenskaben display: none til elementet. Elementet er stadig en del af DOM'en og gengives af browseren, det er bare ikke synligt. Brug *ngIf, når du skal spare ressourcer, og [hidden], når du ofte skifter synlighed og vil undgå omkostningerne ved at tilføje/fjerne fra DOM.
Kan jeg indlejre *ngFor-løkker?
Ja, du kan sagtens indlejre *ngFor-løkker for at iterere over indlejrede datastrukturer, f.eks. en liste over kategorier, der hver indeholder en liste over produkter. Sørg for at bruge unikke navne for de lokale variabler i hver løkke (f.eks. let kategori of kategorier; let produkt of kategori.produkter).
Hvad er en 'pure' pipe i Angular?
En 'pure' pipe er en pipe, der kun udfører en transformation, når dens inputværdier ændres. Angular cachelagrer resultatet af pure pipes og genudfører dem kun, hvis den detekterer en ændring i inputværdien (enten en primitiv ændring eller en referenceændring for objekter/arrays). Dette er standardopførslen for de fleste indbyggede pipes og er ydeevneoptimeret. En 'impure' pipe (f.eks. AsyncPipe) kan genudføres hyppigere, da den kan afhænge af foranderlige eksterne tilstande.
Er skabelonudtryk sikre mod cross-site scripting (XSS)?
Ja, Angular desinficerer (sanitizes) automatisk værdier, der indsættes i DOM'en fra skabeloner. Det betyder, at Angular fjerner potentielt usikker kode (som <script> tags) for at forhindre XSS-angreb. Hvis du skal binde til HTML-indhold, der er kendt for at være sikkert (f.eks. fra en betroet kilde), kan du omgå desinfektionen ved at markere værdien som 'safe' ved hjælp af Angulars DomSanitizer service, men dette skal gøres med stor forsigtighed.

Angulars skabelonfunktioner er en hjørnesten i frameworkets evne til at levere kraftfulde og dynamiske webapplikationer. Ved at mestre datatilknytning, loops og betinget gengivelse kan du skabe intuitive og responsive brugergrænseflader, der effektivt præsenterer og interagerer med din applikations data. Disse værktøjer forenkler udviklingsprocessen, forbedrer kodelæsbarheden og sikrer en robust og vedligeholdelig arkitektur. Uanset om du bygger en simpel blog eller en kompleks virksomhedsløsning, vil din forståelse af Angulars skabelonsprog være en af dine mest værdifulde færdigheder.

Hvis du vil læse andre artikler, der ligner Mestring af Angular Skabeloner: En Dybdegående Guide, kan du besøge kategorien Teknologi.

Go up