Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Oprettelse af en Brugerdefineret Service i Angular | Services and Dependency Injection in Angular
Introduktion til Angular

bookOprettelse af en Brugerdefineret Service i Angular

Oprettelse af en service

Angular tilbyder en praktisk CLI-kommando til hurtigt at generere en service, som opsætter de nødvendige filer og imports:

Efter at have kørt denne kommando, opretter Angular to filer:

  • task.service.ts — selve servicefilen;

  • task.service.spec.ts — en testfil (du kan slette den).

Her er det indledende indhold af task.service.ts:

task-service.ts

task-service.ts

copy

@Injectable-dekorationen fortæller Angular, at denne service kan injiceres i andre klasser.

providedIn: 'root' betyder, at Angular automatisk registrerer servicen i rodmodulet og opretter en enkelt instans af den til hele appen.

Note
Definition

Singleton er et designmønster, der sikrer, at en klasse kun har én instans og giver et globalt adgangspunkt til den.

Komponent A, komponent B eller enhver anden komponent — alle får den samme instans af servicen. Dette er meget praktisk, fordi du kan gemme delte data (som en opgaveliste) og undgå at duplikere logik.

Derfor bliver en service den eneste sandhedskilde for en bestemt del af din apps logik eller data. Hvis du er nysgerrig, kan du lære mere om singleton-mønsteret i denne artikel.

Tilføjelse af logik til servicen

Lad os gå videre til at opbygge logikken for din service. Her er, hvad du ønsker, at den skal gøre:

  • Gemme en liste over opgaver;

  • Returnere opgavelisten;

  • Slette opgaver;

  • Skifte fuldførelsesstatus for opgaver.

Først definerer vi, hvordan en opgave ser ud, ved at oprette et TypeScript-interface:

task-interface.ts

task-interface.ts

copy

Dette interface hjælper med tydeligt at definere strukturen af en opgave — det inkluderer et id, en titel og en fuldført-status. Du har ikke brugt interfaces før, men at tilføje et her gør koden lettere at forstå og arbejde med.

Nu bygger vi servicen, der håndterer din opgaveliste:

task-service.ts

task-service.ts

copy

I dette eksempel gemmes opgavedataene direkte i koden i et privat tasks array.

For at give andre dele af applikationen adgang til opgavelisten, bruges metoden getTasks(). Den returnerer en kopi af arrayet ved hjælp af spread-syntaksen ([...]), hvilket beskytter de oprindelige data mod utilsigtede ændringer.

Metoden deleteTask(id: number) fjerner en opgave ved at filtrere den med det matchende ID fra, så listen opdateres.

En anden vigtig metode er toggleTaskStatus(id: number). Den finder opgaven ud fra dens ID og skifter dens fuldførelsesstatus — hvis opgaven var markeret som fuldført (true), bliver den ufuldført (false), og omvendt.

Note
Bemærk

Du kan måske genkende meget af denne logik fra din TaskListComponent. Nu er det hele flyttet ind i TaskService, hvilket hjælper med at rydde op i dine komponenter og samler din logik ét sted.

Denne service udgør nu fundamentet, der gør det muligt for dine komponenter at interagere med opgavelisten — uden at duplikere logik.

1. Hvorfor opretter man en service i Angular?

2. Hvad betyder providedIn: 'root' i @Injectable-dekorationen?

3. Hvorfor returnerer du [...this.tasks] i stedet for blot this.tasks i getTasks()?

question mark

Hvorfor opretter man en service i Angular?

Select the correct answer

question mark

Hvad betyder providedIn: 'root' i @Injectable-dekorationen?

Select the correct answer

question mark

Hvorfor returnerer du [...this.tasks] i stedet for blot this.tasks i getTasks()?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 2

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

Awesome!

Completion rate improved to 3.13

bookOprettelse af en Brugerdefineret Service i Angular

Stryg for at vise menuen

Oprettelse af en service

Angular tilbyder en praktisk CLI-kommando til hurtigt at generere en service, som opsætter de nødvendige filer og imports:

Efter at have kørt denne kommando, opretter Angular to filer:

  • task.service.ts — selve servicefilen;

  • task.service.spec.ts — en testfil (du kan slette den).

Her er det indledende indhold af task.service.ts:

task-service.ts

task-service.ts

copy

@Injectable-dekorationen fortæller Angular, at denne service kan injiceres i andre klasser.

providedIn: 'root' betyder, at Angular automatisk registrerer servicen i rodmodulet og opretter en enkelt instans af den til hele appen.

Note
Definition

Singleton er et designmønster, der sikrer, at en klasse kun har én instans og giver et globalt adgangspunkt til den.

Komponent A, komponent B eller enhver anden komponent — alle får den samme instans af servicen. Dette er meget praktisk, fordi du kan gemme delte data (som en opgaveliste) og undgå at duplikere logik.

Derfor bliver en service den eneste sandhedskilde for en bestemt del af din apps logik eller data. Hvis du er nysgerrig, kan du lære mere om singleton-mønsteret i denne artikel.

Tilføjelse af logik til servicen

Lad os gå videre til at opbygge logikken for din service. Her er, hvad du ønsker, at den skal gøre:

  • Gemme en liste over opgaver;

  • Returnere opgavelisten;

  • Slette opgaver;

  • Skifte fuldførelsesstatus for opgaver.

Først definerer vi, hvordan en opgave ser ud, ved at oprette et TypeScript-interface:

task-interface.ts

task-interface.ts

copy

Dette interface hjælper med tydeligt at definere strukturen af en opgave — det inkluderer et id, en titel og en fuldført-status. Du har ikke brugt interfaces før, men at tilføje et her gør koden lettere at forstå og arbejde med.

Nu bygger vi servicen, der håndterer din opgaveliste:

task-service.ts

task-service.ts

copy

I dette eksempel gemmes opgavedataene direkte i koden i et privat tasks array.

For at give andre dele af applikationen adgang til opgavelisten, bruges metoden getTasks(). Den returnerer en kopi af arrayet ved hjælp af spread-syntaksen ([...]), hvilket beskytter de oprindelige data mod utilsigtede ændringer.

Metoden deleteTask(id: number) fjerner en opgave ved at filtrere den med det matchende ID fra, så listen opdateres.

En anden vigtig metode er toggleTaskStatus(id: number). Den finder opgaven ud fra dens ID og skifter dens fuldførelsesstatus — hvis opgaven var markeret som fuldført (true), bliver den ufuldført (false), og omvendt.

Note
Bemærk

Du kan måske genkende meget af denne logik fra din TaskListComponent. Nu er det hele flyttet ind i TaskService, hvilket hjælper med at rydde op i dine komponenter og samler din logik ét sted.

Denne service udgør nu fundamentet, der gør det muligt for dine komponenter at interagere med opgavelisten — uden at duplikere logik.

1. Hvorfor opretter man en service i Angular?

2. Hvad betyder providedIn: 'root' i @Injectable-dekorationen?

3. Hvorfor returnerer du [...this.tasks] i stedet for blot this.tasks i getTasks()?

question mark

Hvorfor opretter man en service i Angular?

Select the correct answer

question mark

Hvad betyder providedIn: 'root' i @Injectable-dekorationen?

Select the correct answer

question mark

Hvorfor returnerer du [...this.tasks] i stedet for blot this.tasks i getTasks()?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 2
some-alt