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-serveDans 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.jsondb.json
{
"todos": []
}Entrer dans le terminal :
json-server path-of-jsonAllez 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.

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?