Kurs Angular · Moduł 5: Serwisy i DI

Hierarchia Injectorów

1 min czytania ·
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'

CechaprovidedIn: 'root'providers: []
InstancjaSingletonPer komponent/moduł
Tree-shakingTakNie
Lazy loadingOptymalnyPotrzebny import
UżycieWiększość serwisówSerwisy 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. 1. Co oznacza 'providedIn: root' w dekoratorze @Injectable?

  2. 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.

Przydatne artykuły