Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellung eines Benutzerdefinierten Dienstes in Angular | Services and Dependency Injection in Angular
Einführung in Angular

bookErstellung eines Benutzerdefinierten Dienstes in Angular

Erstellen eines Service

Angular stellt einen praktischen CLI-Befehl zur Verfügung, um schnell einen Service zu generieren, der die notwendigen Dateien und Importe einrichtet:

Nach Ausführung dieses Befehls erstellt Angular zwei Dateien:

  • task.service.ts — die eigentliche Service-Datei;

  • task.service.spec.ts — eine Testdatei (diese kann gelöscht werden).

Hier ist der anfängliche Inhalt von task.service.ts:

task-service.ts

task-service.ts

copy

Der @Injectable-Dekorator teilt Angular mit, dass dieser Service in andere Klassen injiziert werden kann.

Der Teil providedIn: 'root' bedeutet, dass Angular den Service automatisch im Root-Modul registriert und eine einzige Instanz davon für die gesamte Anwendung erstellt.

Note
Definition

Singleton ist ein Entwurfsmuster, das sicherstellt, dass eine Klasse nur eine Instanz besitzt und einen globalen Zugriffspunkt darauf bietet.

Komponente A, Komponente B oder jede andere Komponente – alle erhalten dieselbe Instanz des Service. Das ist äußerst praktisch, da gemeinsam genutzte Daten (wie eine Aufgabenliste) gespeichert und doppelte Logik vermieden werden kann.

Deshalb wird ein Service zur einzigen Quelle der Wahrheit für einen bestimmten Teil der Logik oder Daten Ihrer Anwendung. Wenn Sie neugierig sind, können Sie mehr über das Singleton-Muster in diesem Artikel nachlesen.

Hinzufügen von Logik zum Service

Kommen wir nun dazu, die eigentliche Logik für Ihren Service zu erstellen. Folgendes soll Ihr Service leisten:

  • Speichern einer Liste von Aufgaben;

  • Rückgabe der Aufgabenliste;

  • Löschen von Aufgaben;

  • Umschalten des Erledigt-Status von Aufgaben.

Zuerst definieren wir, wie eine Aufgabe aussieht, indem wir ein TypeScript-Interface erstellen:

task-interface.ts

task-interface.ts

copy

Dieses Interface definiert klar die Struktur einer Aufgabe — es enthält eine id, einen Titel und einen Status für die Erledigung. Sie haben bisher noch keine Interfaces verwendet, aber das Hinzufügen eines solchen macht den Code verständlicher und leichter wartbar.

Nun erstellen wir den Service, der Ihre Aufgabenliste verwaltet:

task-service.ts

task-service.ts

copy

In diesem Beispiel werden die Aufgabendaten direkt im Code in einem privaten tasks-Array gespeichert.

Um anderen Teilen der Anwendung den Zugriff auf die Aufgabenliste zu ermöglichen, wird die Methode getTasks() verwendet. Sie gibt eine Kopie des Arrays mit der Spread-Syntax ([...]) zurück, was dazu beiträgt, die Originaldaten vor unbeabsichtigten Änderungen zu schützen.

Die Methode deleteTask(id: number) entfernt eine Aufgabe, indem sie diejenige mit der passenden ID herausfiltert und die Liste aktualisiert.

Eine weitere wichtige Methode ist toggleTaskStatus(id: number). Sie findet die Aufgabe anhand ihrer ID und wechselt deren Abschlussstatus — war die Aufgabe als abgeschlossen (true) markiert, wird sie auf nicht abgeschlossen (false) gesetzt und umgekehrt.

Note
Hinweis

Sie werden viele dieser Logik bereits aus Ihrer TaskListComponent wiedererkennen. Nun ist sie vollständig in den TaskService verschoben, was Ihre Komponenten übersichtlicher macht und die Logik an einem Ort bündelt.

Dieser Service bildet nun die Grundlage, die es Ihren Komponenten ermöglicht, mit der Aufgabenliste zu interagieren – ohne Logik zu duplizieren.

1. Warum erstellt man einen Service in Angular?

2. Was bedeutet providedIn: 'root' im @Injectable-Dekorator?

3. Warum wird in [...this.tasks] this.tasks zurückgegeben und nicht einfach getTasks()?

question mark

Warum erstellt man einen Service in Angular?

Select the correct answer

question mark

Was bedeutet providedIn: 'root' im @Injectable-Dekorator?

Select the correct answer

question mark

Warum wird in [...this.tasks] this.tasks zurückgegeben und nicht einfach getTasks()?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.13

bookErstellung eines Benutzerdefinierten Dienstes in Angular

Swipe um das Menü anzuzeigen

Erstellen eines Service

Angular stellt einen praktischen CLI-Befehl zur Verfügung, um schnell einen Service zu generieren, der die notwendigen Dateien und Importe einrichtet:

Nach Ausführung dieses Befehls erstellt Angular zwei Dateien:

  • task.service.ts — die eigentliche Service-Datei;

  • task.service.spec.ts — eine Testdatei (diese kann gelöscht werden).

Hier ist der anfängliche Inhalt von task.service.ts:

task-service.ts

task-service.ts

copy

Der @Injectable-Dekorator teilt Angular mit, dass dieser Service in andere Klassen injiziert werden kann.

Der Teil providedIn: 'root' bedeutet, dass Angular den Service automatisch im Root-Modul registriert und eine einzige Instanz davon für die gesamte Anwendung erstellt.

Note
Definition

Singleton ist ein Entwurfsmuster, das sicherstellt, dass eine Klasse nur eine Instanz besitzt und einen globalen Zugriffspunkt darauf bietet.

Komponente A, Komponente B oder jede andere Komponente – alle erhalten dieselbe Instanz des Service. Das ist äußerst praktisch, da gemeinsam genutzte Daten (wie eine Aufgabenliste) gespeichert und doppelte Logik vermieden werden kann.

Deshalb wird ein Service zur einzigen Quelle der Wahrheit für einen bestimmten Teil der Logik oder Daten Ihrer Anwendung. Wenn Sie neugierig sind, können Sie mehr über das Singleton-Muster in diesem Artikel nachlesen.

Hinzufügen von Logik zum Service

Kommen wir nun dazu, die eigentliche Logik für Ihren Service zu erstellen. Folgendes soll Ihr Service leisten:

  • Speichern einer Liste von Aufgaben;

  • Rückgabe der Aufgabenliste;

  • Löschen von Aufgaben;

  • Umschalten des Erledigt-Status von Aufgaben.

Zuerst definieren wir, wie eine Aufgabe aussieht, indem wir ein TypeScript-Interface erstellen:

task-interface.ts

task-interface.ts

copy

Dieses Interface definiert klar die Struktur einer Aufgabe — es enthält eine id, einen Titel und einen Status für die Erledigung. Sie haben bisher noch keine Interfaces verwendet, aber das Hinzufügen eines solchen macht den Code verständlicher und leichter wartbar.

Nun erstellen wir den Service, der Ihre Aufgabenliste verwaltet:

task-service.ts

task-service.ts

copy

In diesem Beispiel werden die Aufgabendaten direkt im Code in einem privaten tasks-Array gespeichert.

Um anderen Teilen der Anwendung den Zugriff auf die Aufgabenliste zu ermöglichen, wird die Methode getTasks() verwendet. Sie gibt eine Kopie des Arrays mit der Spread-Syntax ([...]) zurück, was dazu beiträgt, die Originaldaten vor unbeabsichtigten Änderungen zu schützen.

Die Methode deleteTask(id: number) entfernt eine Aufgabe, indem sie diejenige mit der passenden ID herausfiltert und die Liste aktualisiert.

Eine weitere wichtige Methode ist toggleTaskStatus(id: number). Sie findet die Aufgabe anhand ihrer ID und wechselt deren Abschlussstatus — war die Aufgabe als abgeschlossen (true) markiert, wird sie auf nicht abgeschlossen (false) gesetzt und umgekehrt.

Note
Hinweis

Sie werden viele dieser Logik bereits aus Ihrer TaskListComponent wiedererkennen. Nun ist sie vollständig in den TaskService verschoben, was Ihre Komponenten übersichtlicher macht und die Logik an einem Ort bündelt.

Dieser Service bildet nun die Grundlage, die es Ihren Komponenten ermöglicht, mit der Aufgabenliste zu interagieren – ohne Logik zu duplizieren.

1. Warum erstellt man einen Service in Angular?

2. Was bedeutet providedIn: 'root' im @Injectable-Dekorator?

3. Warum wird in [...this.tasks] this.tasks zurückgegeben und nicht einfach getTasks()?

question mark

Warum erstellt man einen Service in Angular?

Select the correct answer

question mark

Was bedeutet providedIn: 'root' im @Injectable-Dekorator?

Select the correct answer

question mark

Warum wird in [...this.tasks] this.tasks zurückgegeben und nicht einfach getTasks()?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 2
some-alt