Kurs Angular · Moduł 5: Serwisy i DI

Injection Tokens i Zaawansowane DI

1 min czytania ·
W tej lekcji3

Injection Tokens

Tokeny pozwalają wstrzykiwać wartości inne niż klasy:

import { InjectionToken, inject } from '@angular/core';

// Definicja tokenu
export const API_URL = new InjectionToken<string>('API_URL');
export const FEATURE_FLAGS = new InjectionToken<FeatureFlags>('FEATURE_FLAGS');

// Rejestracja w konfiguracji
export const appConfig: ApplicationConfig = {
  providers: [
    { provide: API_URL, useValue: 'https://api.dojo.com/v1' },
    {
      provide: FEATURE_FLAGS,
      useValue: {
        darkMode: true,
        newDashboard: false
      }
    }
  ]
};

// Użycie
@Injectable({ providedIn: 'root' })
export class ApiService {
  private apiUrl = inject(API_URL);

  getSamurai(id: number) {
    return this.http.get(`${this.apiUrl}/samurai/${id}`);
  }
}

Provider Factories

// useFactory - dynamiczne tworzenie wartości
{
  provide: LoggerService,
  useFactory: (env: EnvironmentService) => {
    return env.isProduction()
      ? new ProductionLogger()
      : new DevelopmentLogger();
  },
  deps: [EnvironmentService]
}

// useClass - zamiana implementacji
{
  provide: StorageService,
  useClass: environment.production
    ? CloudStorageService
    : LocalStorageService
}

// useExisting - alias
{
  provide: OldService,
  useExisting: NewService
}

Multi Providers

export const HTTP_INTERCEPTORS = new InjectionToken<HttpInterceptor[]>('HTTP_INTERCEPTORS');

// Można dodawać wiele wartości do jednego tokenu
{
  provide: HTTP_INTERCEPTORS,
  useClass: AuthInterceptor,
  multi: true
},
{
  provide: HTTP_INTERCEPTORS,
  useClass: LoggingInterceptor,
  multi: true
}

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. Do czego służy InjectionToken w Angular?

  2. 2. Którego klucza używasz, aby przypisać stałą wartość do InjectionToken w providers?

To 2 z 3 pytań do tej lekcji. Pozostałe rozwiążesz w grze.

Zadania praktyczne w grze

  • Układanie w poziomie

    Ułóż wyrażenie tworzące InjectionToken (jedna linia):

  • Edytor kodu

    Uzupełnij InjectionToken dla konfiguracji API i jego użycie w komponencie.

  • Układanie w poziomie

    Ułóż obiekt providera używającego fabryki (jedna linia):

  • Klikanie w kolejności

    Zbuduj flagę pozwalającą dodać wiele wartości do jednego tokenu (jedna linia):

  • Układanie w pionie

    Uporządkuj rejestrację InjectionToken w konfiguracji aplikacji (kolejne linie):

Przydatne artykuły