Kurs Angular · Moduł 5: Serwisy i DI
Hierarchia Injectorów
W tej lekcji4
Angular ma hierarchiczną strukturę injectorów - jak system zaopatrzenia od Shoguna przez Daimyo do poszczególnych zamków.
Poziomy Injektorów
Root Injector (Shogun)
↓
Module Injectors (Daimyo)
↓
Element Injectors (Zamki)
↓
Component Injectors (Sale)providedIn Options
// 1. Root - Singleton dla całej aplikacji
@Injectable({ providedIn: 'root' })
export class GlobalService { }
// 2. Any - Nowa instancja dla każdego lazy-loaded modułu (przestarzałe od Angular 15, nie używaj w nowym kodzie)
@Injectable({ providedIn: 'any' })
export class ScopedService { }
// 3. Platform - Dzielony między wieloma aplikacjami Angular
@Injectable({ providedIn: 'platform' })
export class SharedService { }Providers w Komponencie
@Component({
selector: 'app-dojo',
standalone: true,
providers: [
TrainingService // Nowa instancja dla każdej instancji komponentu
],
template: `...`
})
export class DojoComponent {
private training = inject(TrainingService);
}Providers vs providedIn: 'root'
| Cecha | providedIn: 'root' | providers: [] |
|---|---|---|
| Instancja | Singleton | Per komponent/moduł |
| Tree-shaking | Tak | Nie |
| Lazy loading | Optymalny | Potrzebny import |
| Użycie | Większość serwisów | Serwisy per-instancja |
Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Co oznacza 'providedIn: root' w dekoratorze @Injectable?
2. Co się stanie gdy dodamy serwis do 'providers' w dekoratorze @Component?
To 2 z 4 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Układanie w pionie
Uporządkuj poziomy injectorów od najwyższego do najniższego:
- Klikanie w kolejności
Zbuduj wpis rejestrujący serwis na poziomie komponentu (jedna linia):
- Edytor kodu
Uzupełnij komponent z własną instancją CounterService w providers.