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 | Tjenester og Afhængighedsinjektion i Angular
Introduktion til Angular

bookOprettelse af en Brugerdefineret Service i Angular

Før du genererer en service, skal du oprette en mappe til den. Kør følgende kommando:

Dette opretter en services-mappe inde i src/app og navigerer straks ind i den, så du kan begynde at arbejde med dine services med det samme.

Oprettelse af en service

Angular stiller en praktisk CLI-kommando til rådighed, som hurtigt genererer en service og opsætter de nødvendige filer og imports:

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

  • task.service.ts — selve service-filen;

  • 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

Dekoratoren @Injectable angiver for Angular, at denne service kan injiceres i andre klasser.

Delen providedIn: 'root' betyder, at Angular automatisk registrerer servicen i root-modulet 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 faktisk at opbygge logikken for din service. Her er, hvad du ønsker, den skal gøre:

  • Gemme en liste over opgaver;

  • Returnere opgavelisten;

  • Slette opgaver;

  • Skifte status for fuldførelse af opgaver.

Først skal vi definere, 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 status for fuldførelse. Du har ikke brugt interfaces før, men ved at tilføje et her bliver koden lettere at forstå og arbejde med.

Nu skal vi oprette tjenesten, 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 tilsvarende ID fra, hvilket opdaterer listen.

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 vil 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 logikken ét sted.

Denne service udgør nu grundlaget, 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 man [...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 man [...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

Suggested prompts:

What does the initial content of the generated service file look like?

Can you explain how to use the service in a component?

Why should I return a copy of the task list instead of the original array?

bookOprettelse af en Brugerdefineret Service i Angular

Stryg for at vise menuen

Før du genererer en service, skal du oprette en mappe til den. Kør følgende kommando:

Dette opretter en services-mappe inde i src/app og navigerer straks ind i den, så du kan begynde at arbejde med dine services med det samme.

Oprettelse af en service

Angular stiller en praktisk CLI-kommando til rådighed, som hurtigt genererer en service og opsætter de nødvendige filer og imports:

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

  • task.service.ts — selve service-filen;

  • 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

Dekoratoren @Injectable angiver for Angular, at denne service kan injiceres i andre klasser.

Delen providedIn: 'root' betyder, at Angular automatisk registrerer servicen i root-modulet 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 faktisk at opbygge logikken for din service. Her er, hvad du ønsker, den skal gøre:

  • Gemme en liste over opgaver;

  • Returnere opgavelisten;

  • Slette opgaver;

  • Skifte status for fuldførelse af opgaver.

Først skal vi definere, 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 status for fuldførelse. Du har ikke brugt interfaces før, men ved at tilføje et her bliver koden lettere at forstå og arbejde med.

Nu skal vi oprette tjenesten, 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 tilsvarende ID fra, hvilket opdaterer listen.

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 vil 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 logikken ét sted.

Denne service udgør nu grundlaget, 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 man [...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 man [...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