podczas gdy większość z was prawdopodobnie zna podstawowy sposób konfiguracji dostawcy, po prostu deklarując go:

providers: 

wstrzykiwanie zależności kątowych zapewnia bardziej zaawansowane możliwości.

w factory provider możesz skonfigurować Injector, aby zwracać wartość, wywołując określoną funkcję. Spójrzmy na ten przykład.

providers: };

właściwość provide konfiguruje token, który będzie używany do wstrzykiwania zależności, a obiekt użytkowy wskazuje funkcję, która zostanie użyta do zwrócenia żądanej wartości. Właściwość deps konfiguruje tokeny, które zostaną przekazane do funkcji fabrycznej.

kiedy z niego korzystać?

Factory provider może być bardzo przydatny, gdy potrzebujesz dynamicznie utworzyć zależną wartość, na podstawie informacji, których nie będziesz miał do czasu uruchomienia. Możesz podjąć świadomą decyzję, którą wartość zwrócić na podstawie innych usług i stanu aplikacji.

przykład:

spróbujmy odgadnąć z jakiego urządzenia mobilnego jest zalogowany użytkownik. Postaramy się wykorzystać informacje takie jak agent użytkownika przeglądarki, szerokość ekranu i wysokość ekranu. Zdefiniujmy trzy tokeny, które będą później używane do identyfikacji nazwy urządzenia.

Klasa InjectionToken — tworzy token, który może być użyty do iniekcji zależności kątowej. InjectionToken jest parametryzowany naT, który jest typem obiektu, który zostanie zwrócony przezInjector. Zapewnia to dodatkowy poziom bezpieczeństwa typu.

providers: providers: providers: 

teraz możemy wymyślić algorytm do wykrywania nazwy urządzenia w oparciu o trzy tokeny, które zdefiniowaliśmy powyżej. Przekazujemy funkcję strzałki do useFactory, która ma 3 zależności, w celu rozwiązania tych zależności przekazujemy w tablicy zależności (dep) z wymienionymi tokenami.

providers: 

na koniec użyjemy nazwy urządzenia w naszym komponencie kątowym.

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

dekorator parametrów Inject wskazuje Angular DI, że ten parametr (deviceName) powinien zostać rozwiązany z określonego tokena — DeviceName.

To wszystko!

Śledź mnie na Twitterze #LanoTechno

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.