Typer af Databinding i Angular
Når en komponent og dens skabelon interagerer, kan du overføre data og hændelser mellem dem på forskellige måder. Dette kaldes databinding.
I Angular findes der fire typer databinding, som hver især tjener et specifikt formål.
Lad os se på, hvordan de fungerer ved hjælp af et simpelt opgavekomponent som eksempel:
task-component.ts
Her opretter vi et opgaveobjekt med tre egenskaber: id, title og completed. Disse egenskaber beskriver en bestemt opgave—dens navn og om den er fuldført.
Interpolation
For eksempel, hvis du har en variabel som task.title, kan du omslutte den med {{ }}, og Angular vil gengive dens værdi i HTML'en.
task-component.html
Når Angular behandler skabelonen, finder den udtrykket {{ task.title }} og erstatter det med den aktuelle værdi af task.title fra komponenten.
Hvis værdien er 'Buy groceries', er det præcis det, der vises inde i <h3>-tagget.
Den samme proces gælder for alle andre værdier, du interpolerer.
Så interpolation er envejs: data flyder fra komponenten til skabelonen, og brugeren ser blot resultatet.
Egenskabsbinding
Nogle gange vil du ikke kun vise tekst — du vil kontrollere elementets opførsel, som at deaktivere en knap, angive en billedkilde eller markere en afkrydsningsboks.
Angular giver dig mulighed for at binde værdier til HTML-elementegenskaber ved hjælp af kantede parenteser.
task-component.html
Forestil dig, at opgaven allerede er fuldført (task.completed = true). I dette tilfælde ønsker vi, at knappen skal være deaktiveret. Når Angular ser [disabled]="task.completed", tager den værdien fra komponenten og binder den til DOM-elementets disabled-egenskab.
Hvis værdien er true, bliver knappen deaktiveret. Hvis den er false, forbliver knappen aktiv.
Dette er igen envej-binding: data flyder fra komponenten til skabelonen, og skabelonen tilpasses baseret på den aktuelle tilstand af task-objektet.
Begivenheds-binding
For at få din app til at reagere på brugerhandlinger (som klik), tilbyder Angular begivenheds-binding. Når en bruger interagerer med et element, kan du "opfange" denne begivenhed og kalde en metode i din komponent.
Lad os tilføje en metode til komponenten:
task-component.ts
Og opdater skabelonen:
task-component.html
Når brugeren klikker på knappen, registrerer Angular (click)-begivenheden og kalder metoden toggleComplete() i komponenten. Denne metode skifter værdien af task.completed.
Derefter gengiver Angular skabelonen igen, og takket være interpolation ({{ task.completed ? 'Undo' : 'Complete' }}) opdateres knapteksten øjeblikkeligt.
Her flyder data én vej — fra skabelonen tilbage til komponenten (du sender en handling indad).
To-vejs binding
Nogle gange ønsker du, at ændringer i skabelonen (som at indtaste tekst i et inputfelt) straks opdaterer komponenten — og at ændringer i komponenten straks opdaterer skabelonen.
Angular gør dette nemt med to-vejs binding ved hjælp af [(ngModel)].
Vigtigt: For at bruge [(ngModel)] skal du importere FormsModule — som vist nedenfor:
task-component.ts
Og her er skabelonen:
task-component.html
Her sker magien med tovej-binding.
Når en bruger indtaster i inputfeltet, opdaterer Angular automatisk task.title inde i komponenten. Og når task.title ændres i komponenten, afspejler Angular straks denne opdatering i inputfeltet.
I modsætning til de andre bindingstyper holder tovej-binding komponenten og skabelonen synkroniseret til enhver tid.
Nøgleforskelle
Hver af disse bindingstyper har sine egne egenskaber og egner sig bedst til forskellige scenarier for dataudveksling i en applikation.
1. Hvilken type databinding bruges til at vise værdien af en komponents variabel i skabelonen?
2. Hvilken type databinding gør det muligt at opdatere en komponents variabel via en formular og holde den synkroniseret med inputelementet i skabelonen?
3. Hvilken type databinding ville du bruge for at gøre en knap deaktiveret, når en opgave er fuldført?
4. Hvilken type databinding giver dig mulighed for at udløse en komponentmetode, når en knap klikkes?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.13
Typer af Databinding i Angular
Stryg for at vise menuen
Når en komponent og dens skabelon interagerer, kan du overføre data og hændelser mellem dem på forskellige måder. Dette kaldes databinding.
I Angular findes der fire typer databinding, som hver især tjener et specifikt formål.
Lad os se på, hvordan de fungerer ved hjælp af et simpelt opgavekomponent som eksempel:
task-component.ts
Her opretter vi et opgaveobjekt med tre egenskaber: id, title og completed. Disse egenskaber beskriver en bestemt opgave—dens navn og om den er fuldført.
Interpolation
For eksempel, hvis du har en variabel som task.title, kan du omslutte den med {{ }}, og Angular vil gengive dens værdi i HTML'en.
task-component.html
Når Angular behandler skabelonen, finder den udtrykket {{ task.title }} og erstatter det med den aktuelle værdi af task.title fra komponenten.
Hvis værdien er 'Buy groceries', er det præcis det, der vises inde i <h3>-tagget.
Den samme proces gælder for alle andre værdier, du interpolerer.
Så interpolation er envejs: data flyder fra komponenten til skabelonen, og brugeren ser blot resultatet.
Egenskabsbinding
Nogle gange vil du ikke kun vise tekst — du vil kontrollere elementets opførsel, som at deaktivere en knap, angive en billedkilde eller markere en afkrydsningsboks.
Angular giver dig mulighed for at binde værdier til HTML-elementegenskaber ved hjælp af kantede parenteser.
task-component.html
Forestil dig, at opgaven allerede er fuldført (task.completed = true). I dette tilfælde ønsker vi, at knappen skal være deaktiveret. Når Angular ser [disabled]="task.completed", tager den værdien fra komponenten og binder den til DOM-elementets disabled-egenskab.
Hvis værdien er true, bliver knappen deaktiveret. Hvis den er false, forbliver knappen aktiv.
Dette er igen envej-binding: data flyder fra komponenten til skabelonen, og skabelonen tilpasses baseret på den aktuelle tilstand af task-objektet.
Begivenheds-binding
For at få din app til at reagere på brugerhandlinger (som klik), tilbyder Angular begivenheds-binding. Når en bruger interagerer med et element, kan du "opfange" denne begivenhed og kalde en metode i din komponent.
Lad os tilføje en metode til komponenten:
task-component.ts
Og opdater skabelonen:
task-component.html
Når brugeren klikker på knappen, registrerer Angular (click)-begivenheden og kalder metoden toggleComplete() i komponenten. Denne metode skifter værdien af task.completed.
Derefter gengiver Angular skabelonen igen, og takket være interpolation ({{ task.completed ? 'Undo' : 'Complete' }}) opdateres knapteksten øjeblikkeligt.
Her flyder data én vej — fra skabelonen tilbage til komponenten (du sender en handling indad).
To-vejs binding
Nogle gange ønsker du, at ændringer i skabelonen (som at indtaste tekst i et inputfelt) straks opdaterer komponenten — og at ændringer i komponenten straks opdaterer skabelonen.
Angular gør dette nemt med to-vejs binding ved hjælp af [(ngModel)].
Vigtigt: For at bruge [(ngModel)] skal du importere FormsModule — som vist nedenfor:
task-component.ts
Og her er skabelonen:
task-component.html
Her sker magien med tovej-binding.
Når en bruger indtaster i inputfeltet, opdaterer Angular automatisk task.title inde i komponenten. Og når task.title ændres i komponenten, afspejler Angular straks denne opdatering i inputfeltet.
I modsætning til de andre bindingstyper holder tovej-binding komponenten og skabelonen synkroniseret til enhver tid.
Nøgleforskelle
Hver af disse bindingstyper har sine egne egenskaber og egner sig bedst til forskellige scenarier for dataudveksling i en applikation.
1. Hvilken type databinding bruges til at vise værdien af en komponents variabel i skabelonen?
2. Hvilken type databinding gør det muligt at opdatere en komponents variabel via en formular og holde den synkroniseret med inputelementet i skabelonen?
3. Hvilken type databinding ville du bruge for at gøre en knap deaktiveret, når en opgave er fuldført?
4. Hvilken type databinding giver dig mulighed for at udløse en komponentmetode, når en knap klikkes?
Tak for dine kommentarer!