Cours Angular · Module 5: Services et DI
La hiérarchie des injecteurs
Dans cette leçon4
Angular possède une structure hiérarchique d'injecteurs - comme un système d'approvisionnement allant du Shogun aux Daimyo jusqu'aux châteaux individuels.
Les niveaux d'injecteurs
1Root Injector (Shogun)
2 ↓
3Module Injectors (Daimyo)
4 ↓
5Element Injectors (Castles)
6 ↓
7Component Injectors (Halls)Les options de providedIn
1// 1. Root - Singleton pour toute l'application
2@Injectable({ providedIn: 'root' })
3export class GlobalService { }
4
5// 2. Any - Nouvelle instance pour chaque module en lazy loading (dépréciée depuis Angular 15, à éviter dans le nouveau code)
6@Injectable({ providedIn: 'any' })
7export class ScopedService { }
8
9// 3. Platform - Partagé entre plusieurs applications Angular
10@Injectable({ providedIn: 'platform' })
11export class SharedService { }Providers dans un composant
1@Component({
2 selector: 'app-dojo',
3 standalone: true,
4 providers: [
5 TrainingService // Nouvelle instance pour chaque instance du composant
6 ],
7 template: `...`
8})
9export class DojoComponent {
10 private training = inject(TrainingService);
11}Providers vs providedIn: 'root'
| Feature | providedIn: 'root' | providers: [] |
|---|---|---|
| Instance | Singleton | Par composant/module |
| Tree-shaking | Oui | Non |
| Lazy loading | Optimal | Nécessite un import |
| Usage | La plupart des services | Services par instance |
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. Que signifie 'providedIn: root' dans le décorateur @Injectable ?
2. Que se passe-t-il si on ajoute un service à 'providers' dans le décorateur @Component ?
Voici 2 des 4 questions de cette leçon. Réponds aux autres dans le jeu.
Tâches pratiques dans le jeu
- Tri vertical
Ordonne les niveaux d'injecteurs du plus haut au plus bas :
- Clique dans l'ordre
Ordonne sur une seule ligne l'entrée qui enregistre un service au niveau du composant :
- Éditeur de code
Complète le composant avec sa propre instance de CounterService dans providers.