API

[Début de la branche step-6]

On a maintenant toutes nos fonctionnalités : Create, Select, Update, Delete. Cela reste du local ou du offline. Il est temps de mettre en place un serveur et d'y inclure des requêtes http.

Pour maximiser le temps, on va créer une API avec le module npm JsonPlaceholder .

npm install -g json-serve

Dans notre projet, inclure un nouveau dossier /server au même niveau que /app et y ajouter un fichier json qui sera notre base de données :

src
|
└───app
|
└───server
|
└───db.json

db.json

{
    "todos": []
}

Entrer dans le terminal :

json-server path-of-json

Allez sur localhost:3000/todos et vous avez une API prête à l'emploi.

Get Todos

Générer un service depuis le terminal :

Déclarer dans le AppModule ainsi que le dernier module HttpClient d'Angular :

app.module.ts

services/todo-list.service

Plus simplement pour les imports :

tsconfig.json

Dans ce fichier, placer les paramètres d'API comme l'url :

environment.ts

Ajouter le service dans le component. Et au resolve de la requête, passer InitTodos :

modules/todo-list/components/all-todos/all-todo.component.ts

Changer l'action de InitTodos en lui ajoutant un payload :

store/actions/todo-list.action.ts

Le reducer doit retourner le payload à la place du mock que l'on peut totalement supprimer /mocks

store/reducers/todo-list.reducer.ts

Introduction des Effects

Les todos sont bien chargées mais avec NGRX il est possible d'aller plus loin en gérant également la partie asynchrone .

Effects est un second module de NGRX. Il vous fournit des listenners d'actions qui peuvent effectuer des fonctions et retourner une nouvelle action.

effects

Avec un Effect, il n'y aura pas une action InitTodos, mais trois :

  • LoadInitTodos : chargera les données de l'API ;

    • SuccessInitTodos : réponse serveur positive ;

    • ErrorInitTodos : réponse serveur négative.

LoadInitTodos => SuccessInitTodos || ErrorInitTodos

Installation :

Créer un nouveau fichier effect/ :

Alias :

tsconfig.json

Ajouter les trois actions pour l'effect : LOAD_INIT_TODOS, SUCCESS_INIT_TODOS, ERROR_INIT_TODOS.

Retirer l'action InitTodos

store/actions/todo-list.action.ts

Nous avons deux étapes lors d'un LoadinitTodos, on peut donc faire un switch sur les propriétés dans le reducer et commencer à jouer avec les booléens loading & loaded .

Ce détail permettra de changer votre template lors du chargement des todos en ajoutant un loader et en désactivant les boutons durant la requête de chargement.

store/reducers/todo-list.reducer.ts

Pour écrire notre premier Effect qui est un Observable, on peut utiliser tout ce que peut nous fournir RXJS pour faire du traitement, combiner des states etc... :

store/effects/todo-list.effect.ts

Pour finaliser l'implémentation des effects, déclarer un tableau d'effect dans l'index du store :

Ajouter deux autres sélecteurs pour le loading et le loaded state :

store/selectors/todo-list.selector.ts

Importer le module EffectsModule dans le module principal en lui passant notre tableau d'effect :

app.module.ts

modules/todo-list/components/all-todos/all-todo.component.ts

Plus besoin d'avoir le service dans le component. C'est maintenant l'effect qui, via le LoadInitTodos, va utiliser le service getTodos qui dispatchera notre liste de todos via l'action SuccessInitTodos.

Last updated

Was this helpful?