Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Skapa en Anpassad Tjänst i Angular | Services and Dependency Injection in Angular
Introduktion till Angular

bookSkapa en Anpassad Tjänst i Angular

Skapa en tjänst

Angular tillhandahåller ett smidigt CLI-kommando för att snabbt generera en tjänst, vilket skapar de nödvändiga filerna och importerna:

Efter att ha kört detta kommando skapar Angular två filer:

  • task.service.ts — själva tjänstfilen;

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

Här är det initiala innehållet i task.service.ts:

task-service.ts

task-service.ts

copy

@Injectable-dekoren informerar Angular om att denna tjänst kan injiceras i andra klasser.

Delen providedIn: 'root' innebär att Angular automatiskt registrerar tjänsten i rotmodulen och skapar en enda instans av den för hela applikationen.

Note
Definition

Singleton är ett designmönster som säkerställer att en klass endast har en instans och tillhandahåller en global åtkomstpunkt till den.

Komponent A, Komponent B eller någon annan komponent — alla får samma instans av tjänsten. Detta är mycket praktiskt eftersom du kan lagra delad data (som en uppgiftslista) och undvika att duplicera logik.

Det är därför en tjänst blir den enda sanningskällan för en specifik del av din applikations logik eller data. Om du är nyfiken kan du läsa mer om singleton-mönstret i denna artikel.

Lägga till logik i tjänsten

Låt oss gå vidare till att faktiskt bygga logiken för din tjänst. Här är vad du vill att den ska göra:

  • Lagra en lista med uppgifter;

  • Returnera uppgiftslistan;

  • Ta bort uppgifter;

  • Växla slutförandestatus för uppgifter.

Först definierar vi hur en uppgift ser ut genom att skapa ett TypeScript-interface:

task-interface.ts

task-interface.ts

copy

Detta interface hjälper till att tydligt definiera strukturen för en uppgift — det inkluderar ett id, en titel och en slutförd-status. Du har inte använt interface tidigare, men att lägga till ett här gör koden enklare att förstå och arbeta med.

Nu bygger vi tjänsten som hanterar din uppgiftslista:

task-service.ts

task-service.ts

copy

I det här exemplet lagras uppgiftsdata direkt i koden i en privat tasks-array.

För att andra delar av applikationen ska kunna komma åt uppgiftslistan används metoden getTasks(). Den returnerar en kopia av arrayen med hjälp av spread-syntaxen ([...]), vilket skyddar originaldatan från oavsiktliga ändringar.

Metoden deleteTask(id: number) tar bort en uppgift genom att filtrera bort den med matchande ID och uppdaterar listan.

En annan viktig metod är toggleTaskStatus(id: number). Den hittar uppgiften via dess ID och växlar dess slutförandestatus — om uppgiften var markerad som slutförd (true) blir den ofullständig (false), och vice versa.

Note
Notering

Du kanske känner igen mycket av denna logik från din TaskListComponent. Nu har allt flyttats till TaskService, vilket hjälper till att hålla dina komponenter renare och samlar logiken på ett ställe.

Denna tjänst är nu grunden som gör det möjligt för dina komponenter att interagera med uppgiftslistan — utan att duplicera logik.

1. Varför skapar du en tjänst i Angular?

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

3. Varför returnerar du [...this.tasks] istället för bara this.tasks i getTasks()?

question mark

Varför skapar du en tjänst i Angular?

Select the correct answer

question mark

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

Select the correct answer

question mark

Varför returnerar du [...this.tasks] istället för bara this.tasks i getTasks()?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2

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

Awesome!

Completion rate improved to 3.13

bookSkapa en Anpassad Tjänst i Angular

Svep för att visa menyn

Skapa en tjänst

Angular tillhandahåller ett smidigt CLI-kommando för att snabbt generera en tjänst, vilket skapar de nödvändiga filerna och importerna:

Efter att ha kört detta kommando skapar Angular två filer:

  • task.service.ts — själva tjänstfilen;

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

Här är det initiala innehållet i task.service.ts:

task-service.ts

task-service.ts

copy

@Injectable-dekoren informerar Angular om att denna tjänst kan injiceras i andra klasser.

Delen providedIn: 'root' innebär att Angular automatiskt registrerar tjänsten i rotmodulen och skapar en enda instans av den för hela applikationen.

Note
Definition

Singleton är ett designmönster som säkerställer att en klass endast har en instans och tillhandahåller en global åtkomstpunkt till den.

Komponent A, Komponent B eller någon annan komponent — alla får samma instans av tjänsten. Detta är mycket praktiskt eftersom du kan lagra delad data (som en uppgiftslista) och undvika att duplicera logik.

Det är därför en tjänst blir den enda sanningskällan för en specifik del av din applikations logik eller data. Om du är nyfiken kan du läsa mer om singleton-mönstret i denna artikel.

Lägga till logik i tjänsten

Låt oss gå vidare till att faktiskt bygga logiken för din tjänst. Här är vad du vill att den ska göra:

  • Lagra en lista med uppgifter;

  • Returnera uppgiftslistan;

  • Ta bort uppgifter;

  • Växla slutförandestatus för uppgifter.

Först definierar vi hur en uppgift ser ut genom att skapa ett TypeScript-interface:

task-interface.ts

task-interface.ts

copy

Detta interface hjälper till att tydligt definiera strukturen för en uppgift — det inkluderar ett id, en titel och en slutförd-status. Du har inte använt interface tidigare, men att lägga till ett här gör koden enklare att förstå och arbeta med.

Nu bygger vi tjänsten som hanterar din uppgiftslista:

task-service.ts

task-service.ts

copy

I det här exemplet lagras uppgiftsdata direkt i koden i en privat tasks-array.

För att andra delar av applikationen ska kunna komma åt uppgiftslistan används metoden getTasks(). Den returnerar en kopia av arrayen med hjälp av spread-syntaxen ([...]), vilket skyddar originaldatan från oavsiktliga ändringar.

Metoden deleteTask(id: number) tar bort en uppgift genom att filtrera bort den med matchande ID och uppdaterar listan.

En annan viktig metod är toggleTaskStatus(id: number). Den hittar uppgiften via dess ID och växlar dess slutförandestatus — om uppgiften var markerad som slutförd (true) blir den ofullständig (false), och vice versa.

Note
Notering

Du kanske känner igen mycket av denna logik från din TaskListComponent. Nu har allt flyttats till TaskService, vilket hjälper till att hålla dina komponenter renare och samlar logiken på ett ställe.

Denna tjänst är nu grunden som gör det möjligt för dina komponenter att interagera med uppgiftslistan — utan att duplicera logik.

1. Varför skapar du en tjänst i Angular?

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

3. Varför returnerar du [...this.tasks] istället för bara this.tasks i getTasks()?

question mark

Varför skapar du en tjänst i Angular?

Select the correct answer

question mark

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

Select the correct answer

question mark

Varför returnerar du [...this.tasks] istället för bara this.tasks i getTasks()?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2
some-alt