mens de fleste av dere mest sannsynlig kjent med den grunnleggende måten å konfigurere en leverandør ved å erklære dem:

providers: 

Angular dependency injection gir mer avanserte evner.

Med Fabrikkleverandør kan du konfigurere Injector for å returnere en verdi ved å påkalle en bestemt funksjon. La oss se på dette eksemplet.

providers: };

gi-egenskapen konfigurerer token som skal brukes i dependency injection, og useFactory peker på funksjonen som skal brukes til å returnere ønsket verdi. Deps-egenskapen konfigurerer tokens som vil bli sendt til fabrikkfunksjonen din.

når skal du bruke den?

Fabrikkleverandør kan være svært nyttig når du trenger å opprette en avhengig verdi dynamisk, basert på informasjon du ikke har før kjøretid. Du kan ta en informert beslutning om hvilken verdi du skal returnere basert på andre tjenester og applikasjonsstat.

Eksempel:

La oss prøve å gjette hvilken mobil enhet en bruker er logget inn fra. Vi vil prøve å bruke informasjon som browser user-agent, skjermbredde og skjermhøyde. La oss definere tre token som vil bli brukt senere for å identifisere enhetsnavnet.

klassenInjectionTokenOppretter et token som Kan brukes I Vinkelavhengighetsinjeksjon. InjectionToken er parameterisert på T som er typen objekt som vil bli returnert av Injector. Dette gir et ekstra nivå av type sikkerhet.

providers: providers: providers: 

nå kan Vi komme opp med en algoritme for å oppdage enhetsnavnet basert på de tre tokens vi definerte ovenfor. Vi sender en pilfunksjon til useFactory som har 3 avhengigheter, for å løse disse avhengighetene, passerer vi i en dependency array (dep) med de oppførte tokens.

providers: 

Til Slutt vil vi forbruke enhetsnavnet i Vår Vinkelkomponent.

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

Inject parameter decorator indikerer Til Angular DI at denne parameteren (deviceName) skal løses fra et definert token — DeviceName.

Det er alt!

Følg Meg På Twitter # LanoTechno

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.