Zatímco většina z vás pravděpodobně obeznámeni s základní způsob, jak nakonfigurovat poskytovatele tím, že prostě prohlásí:

providers: 

Úhlová závislost injekce poskytuje více pokročilé funkce.

s továrním poskytovatelem můžete nakonfigurovat Injector pro vrácení hodnoty vyvoláním konkrétní funkce. Podívejme se na tento příklad.

providers: };

poskytnout majetek nastaví token, který bude použit v dependency injection a useFactory ukazuje na funkci, která bude být použity k návratu na požadovanou hodnotu. Vlastnost deps konfiguruje tokeny, které budou předány vaší tovární funkci.

kdy jej použít?

tovární poskytovatel může být velmi užitečný, když potřebujete dynamicky vytvořit závislou hodnotu na základě informací, které nebudete mít do doby běhu. Na základě dalších služeb a stavu aplikace můžete učinit informované rozhodnutí, kterou hodnotu vrátit.

příklad:

zkusme odhadnout, ze kterého mobilního zařízení je uživatel přihlášen. Pokusíme se použít informace, jako je uživatelský agent prohlížeče, šířka obrazovky a výška obrazovky. Definujme tři tokeny, které budou později použity k identifikaci názvu zařízení.

třída InjectionToken – vytváří token, který lze použít při vstřikování Úhlové závislosti. InjectionToken je nastaven na T což je typ objektu, který bude vrácen do Injector. To poskytuje další úroveň bezpečnosti typu.

providers: providers: providers: 

Nyní můžeme přijít s algoritmem pro detekci názvu zařízení na základě tří tokenů, které jsme definovali výše. Předáme funkci šipky do useFactory, která má 3 závislosti, abychom tyto závislosti vyřešili, předáme pole závislostí (dep) s uvedenými tokeny.

providers: 

nakonec použijeme název zařízení v naší Úhlové komponentě.

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

dekorátor parametrů Inject signalizuje Angular DI, že tento parametr (deviceName) by měl být vyřešen z definovaného tokenu-DeviceName.

to je vše!

Sleduj mě na Twitteru # LanoTechno

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.