mens de fleste af jer sandsynligvis er bekendt med den grundlæggende måde at konfigurere en udbyder ved blot at erklære dem:

providers: 

vinkelafhængighedsinjektion giver mere avancerede funktioner.

Med Factory provider kan du konfigurereInjector for at returnere en værdi ved at påberåbe sig en bestemt funktion. Lad os se på dette eksempel.

egenskaben giv konfigurerer det token, der skal bruges i afhængighedsinjektion, og useFactory peger på den funktion, der vil blive brugt til at returnere den ønskede værdi. Egenskaben deps konfigurerer de tokens, der sendes til din fabriksfunktion.

Hvornår skal du bruge det?

Factory provider kan være meget praktisk, når du skal oprette en afhængig værdi dynamisk, baseret på oplysninger, du ikke har før køretid. Du kan træffe en informeret beslutning om, hvilken værdi der skal returneres baseret på andre tjenester og applikationstilstand.

eksempel:

lad os prøve at gætte, hvilken mobilenhed en bruger er logget ind fra. Vi vil forsøge at bruge oplysninger som f.eks. Lad os definere tre token, der vil blive brugt senere til at identificere enhedsnavnet.

InjectionTokenklasse-opretter et token, der kan bruges i vinkelafhængighedsinjektion. InjectionToken er parameteriseret på T hvilket er den type objekt, der vil blive returneret af Injector. Dette giver et ekstra niveau af type sikkerhed.

providers: providers: providers: 

nu kan vi komme med en algoritme til at registrere enhedsnavnet baseret på de tre tokens, vi definerede ovenfor. Vi sender en pilfunktion til useFactory, der har 3 afhængigheder, for at løse disse afhængigheder, passerer vi i et afhængighedsarray (Dep) med de angivne tokens.

providers: 

endelig vil vi forbruge enhedsnavnet i vores Vinkelkomponent.

@Component({ selector: 'my-device-name')
export class DeviceName {
constructor(@Inject('DeviceName') private deviceName: string) {}}

Inject parameter decorator angiver til Angular DI, at denne parameter (deviceName) skal løses fra et defineret token — DeviceName.

det er alt!

Følg mig på kvidre # LanoTechno

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.