Kurs Angular · Moduł 5: Serwisy i DI
Injection Tokens i Zaawansowane DI
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. Do czego służy InjectionToken w Angular?
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):