Cours Angular · Module 5: Services et DI
Les Injection Tokens et la DI avancée
Dans cette leçon3
Les Injection Tokens
Les tokens permettent d'injecter des valeurs autres que des classes :
1import { InjectionToken, inject } from '@angular/core';
2
3// Définition du token
4export const API_URL = new InjectionToken<string>('API_URL');
5export const FEATURE_FLAGS = new InjectionToken<FeatureFlags>('FEATURE_FLAGS');
6
7// Enregistrement dans la configuration
8export const appConfig: ApplicationConfig = {
9 providers: [
10 { provide: API_URL, useValue: 'https://api.dojo.com/v1' },
11 {
12 provide: FEATURE_FLAGS,
13 useValue: {
14 darkMode: true,
15 newDashboard: false
16 }
17 }
18 ]
19};
20
21// Utilisation
22@Injectable({ providedIn: 'root' })
23export class ApiService {
24 private apiUrl = inject(API_URL);
25
26 getSamurai(id: number) {
27 return this.http.get(`${this.apiUrl}/samurai/${id}`);
28 }
29}Les fabriques de providers
1// useFactory - création dynamique de valeur
2{
3 provide: LoggerService,
4 useFactory: (env: EnvironmentService) => {
5 return env.isProduction()
6 ? new ProductionLogger()
7 : new DevelopmentLogger();
8 },
9 deps: [EnvironmentService]
10}
11
12// useClass - substitution d'implémentations
13{
14 provide: StorageService,
15 useClass: environment.production
16 ? CloudStorageService
17 : LocalStorageService
18}
19
20// useExisting - alias
21{
22 provide: OldService,
23 useExisting: NewService
24}Providers multiples
1export const HTTP_INTERCEPTORS = new InjectionToken<HttpInterceptor[]>('HTTP_INTERCEPTORS');
2
3// On peut ajouter plusieurs valeurs à un même token
4{
5 provide: HTTP_INTERCEPTORS,
6 useClass: AuthInterceptor,
7 multi: true
8},
9{
10 provide: HTTP_INTERCEPTORS,
11 useClass: LoggingInterceptor,
12 multi: true
13}Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. À quoi sert InjectionToken dans Angular ?
2. Quelle clé utilises-tu pour assigner une valeur constante à un InjectionToken dans providers ?
Voici 2 des 3 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Tri horizontal
Ordonne sur une seule ligne l'expression qui crée un InjectionToken :
- Éditeur de code
Complète l'InjectionToken pour la configuration de l'API et son utilisation dans le composant.
- Tri horizontal
Ordonne sur une seule ligne l'objet provider qui utilise une factory :
- Clique dans l'ordre
Ordonne sur une seule ligne l'indicateur qui permet d'ajouter plusieurs valeurs à un même jeton :
- Tri vertical
Ordonne l'enregistrement d'un InjectionToken dans la configuration de l'application (lignes consécutives) :