Een Aangepaste Service Maken in Angular
Een service aanmaken
Angular biedt een handige CLI-opdracht om snel een service te genereren, waarmee de benodigde bestanden en imports worden aangemaakt:
Na het uitvoeren van deze opdracht maakt Angular twee bestanden aan:
-
task.service.ts
— het daadwerkelijke servicebestand; -
task.service.spec.ts
— een testbestand (dit kun je verwijderen).
Hier is de initiële inhoud van task.service.ts
:
task-service.ts
De @Injectable
decorator geeft aan Angular aan dat deze service kan worden geïnjecteerd in andere klassen.
Het gedeelte providedIn: 'root'
betekent dat Angular de service automatisch registreert in de rootmodule en er één enkele instantie van maakt voor de gehele applicatie.
Singleton is een ontwerppatroon dat ervoor zorgt dat een klasse slechts één instantie heeft en een wereldwijd toegangspunt biedt.
Component A
, Component B
, of een andere component — allemaal krijgen ze dezelfde instantie van de service. Dit is zeer handig omdat je gedeelde data (zoals een takenlijst) kunt opslaan en het dupliceren van logica voorkomt.
Daarom wordt een service de enige bron van waarheid voor een specifiek deel van de logica of data van je applicatie. Als je nieuwsgierig bent, kun je meer leren over het singleton-patroon in dit artikel.
Logica toevoegen aan de service
Laten we verdergaan met het daadwerkelijk opbouwen van de logica voor je service. Dit is wat je wilt dat de service doet:
-
Een lijst met taken opslaan;
-
De takenlijst retourneren;
-
Taken verwijderen;
-
De voltooiingsstatus van taken omzetten.
Laten we eerst definiëren hoe een taak eruitziet door een TypeScript-interface te maken:
task-interface.ts
Deze interface helpt om de structuur van een taak duidelijk te definiëren — het bevat een id, een titel en een voltooid-status. Je hebt nog niet eerder interfaces gebruikt, maar het toevoegen van een interface maakt de code eenvoudiger te begrijpen en mee te werken.
Laten we nu de service bouwen die je takenlijst beheert:
task-service.ts
In dit voorbeeld worden de taakgegevens direct in de code opgeslagen in een privé tasks
array.
Om andere delen van de applicatie toegang te geven tot de takenlijst, wordt de methode getTasks()
gebruikt. Deze retourneert een kopie van de array met behulp van de spread-syntax ([...]
), wat helpt om de originele gegevens te beschermen tegen onbedoelde wijzigingen.
De methode deleteTask(id: number)
verwijdert een taak door degene met het overeenkomende ID eruit te filteren en de lijst bij te werken.
Een andere belangrijke methode is toggleTaskStatus(id: number)
. Deze zoekt de taak op basis van het ID en schakelt de voltooiingsstatus om — als de taak als voltooid (true
) was gemarkeerd, wordt deze onvoltooid (false
), en omgekeerd.
Veel van deze logica herken je misschien uit je TaskListComponent
. Nu is alles verplaatst naar TaskService
, wat helpt om je componenten op te schonen en je logica op één plek te houden.
Deze service vormt nu de basis waarmee je componenten kunnen communiceren met de takenlijst — zonder logica te dupliceren.
1. Waarom maak je een service in Angular?
2. Wat betekent providedIn: 'root'
in de @Injectable
decorator?
3. Waarom retourneer je [...this.tasks]
in plaats van alleen this.tasks
in getTasks()
?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.13
Een Aangepaste Service Maken in Angular
Veeg om het menu te tonen
Een service aanmaken
Angular biedt een handige CLI-opdracht om snel een service te genereren, waarmee de benodigde bestanden en imports worden aangemaakt:
Na het uitvoeren van deze opdracht maakt Angular twee bestanden aan:
-
task.service.ts
— het daadwerkelijke servicebestand; -
task.service.spec.ts
— een testbestand (dit kun je verwijderen).
Hier is de initiële inhoud van task.service.ts
:
task-service.ts
De @Injectable
decorator geeft aan Angular aan dat deze service kan worden geïnjecteerd in andere klassen.
Het gedeelte providedIn: 'root'
betekent dat Angular de service automatisch registreert in de rootmodule en er één enkele instantie van maakt voor de gehele applicatie.
Singleton is een ontwerppatroon dat ervoor zorgt dat een klasse slechts één instantie heeft en een wereldwijd toegangspunt biedt.
Component A
, Component B
, of een andere component — allemaal krijgen ze dezelfde instantie van de service. Dit is zeer handig omdat je gedeelde data (zoals een takenlijst) kunt opslaan en het dupliceren van logica voorkomt.
Daarom wordt een service de enige bron van waarheid voor een specifiek deel van de logica of data van je applicatie. Als je nieuwsgierig bent, kun je meer leren over het singleton-patroon in dit artikel.
Logica toevoegen aan de service
Laten we verdergaan met het daadwerkelijk opbouwen van de logica voor je service. Dit is wat je wilt dat de service doet:
-
Een lijst met taken opslaan;
-
De takenlijst retourneren;
-
Taken verwijderen;
-
De voltooiingsstatus van taken omzetten.
Laten we eerst definiëren hoe een taak eruitziet door een TypeScript-interface te maken:
task-interface.ts
Deze interface helpt om de structuur van een taak duidelijk te definiëren — het bevat een id, een titel en een voltooid-status. Je hebt nog niet eerder interfaces gebruikt, maar het toevoegen van een interface maakt de code eenvoudiger te begrijpen en mee te werken.
Laten we nu de service bouwen die je takenlijst beheert:
task-service.ts
In dit voorbeeld worden de taakgegevens direct in de code opgeslagen in een privé tasks
array.
Om andere delen van de applicatie toegang te geven tot de takenlijst, wordt de methode getTasks()
gebruikt. Deze retourneert een kopie van de array met behulp van de spread-syntax ([...]
), wat helpt om de originele gegevens te beschermen tegen onbedoelde wijzigingen.
De methode deleteTask(id: number)
verwijdert een taak door degene met het overeenkomende ID eruit te filteren en de lijst bij te werken.
Een andere belangrijke methode is toggleTaskStatus(id: number)
. Deze zoekt de taak op basis van het ID en schakelt de voltooiingsstatus om — als de taak als voltooid (true
) was gemarkeerd, wordt deze onvoltooid (false
), en omgekeerd.
Veel van deze logica herken je misschien uit je TaskListComponent
. Nu is alles verplaatst naar TaskService
, wat helpt om je componenten op te schonen en je logica op één plek te houden.
Deze service vormt nu de basis waarmee je componenten kunnen communiceren met de takenlijst — zonder logica te dupliceren.
1. Waarom maak je een service in Angular?
2. Wat betekent providedIn: 'root'
in de @Injectable
decorator?
3. Waarom retourneer je [...this.tasks]
in plaats van alleen this.tasks
in getTasks()
?
Bedankt voor je feedback!