8

Rozumiem, że dostawca jest przeznaczony do korzystania z usług innej klasy, ale co to jest usługa typu multi-provider i token?Co to jest dostawca multi w angular2?

A także kiedy robimy multi=true?

provide(NG_VALIDATORS, { useExisting: class), multi: true }) 

Odpowiedz

0

Korzystanie multi: true mówi kątowa, że ​​dostawca jest multi dostawcy. Jak wspomniano wcześniej, w przypadku wielu dostawców możemy podać wiele wartości dla pojedynczego tokena w DI.

Usages:

Jeśli mamy kilka dyrektyw, które powinny być automatycznie dostępne w całej naszej aplikacji bez nikogo posiadającego je zdefiniować w dekoracji składowych, możemy to zrobić, korzystając z wielu dostawców i rozszerzenie co jest wstrzykiwane dla PLATFORM_DIRECTIVES.

@Directive(...) 
class Draggable { } 

@Directive(...) 
class Morphable { } 

@Component(...) 
class RootCmp { } 

i

// at bootstrap 
bootstrap(RooCmp, [ 
    provide(PLATFORM_DIRECTIVES, {useValue: Draggable, multi: true}), 
    provide(PLATFORM_DIRECTIVES, {useValue: Morphable, multi: true}) 
]); 

Details

+0

co to znaczy podać wiele wartości dla pojedynczego tokena w DI – blackHawk

+0

Zobacz przykładowy kod. Wstrzyknięcie tablicy dyrektyw/wartości w kodzie. Link szczegółowy zawiera przykłady i objaśnienia. –

+0

Co to znaczy, jeśli funkcja zadeklarowana w ten sposób: private get isReverse() czym jest słowo kluczowe – blackHawk

0

Od docs:

Tworzy wielu dostawców pasujących ten sam znak (multi-operatora). Wielu dostawców jest używanych do tworzenia usług wtykowych, w których system jest dostarczany z niektórymi domyślnymi dostawcami, a użytkownik może zarejestrować dodatkowych dostawców w liczbie: . Kombinacja domyślnych dostawców i dodatkowych dostawców będzie używana do sterowania działaniem systemu.

Source

11

multi: true oznacza, że ​​jeden operator znacznik stanowi szereg elementów. Na przykład wszystkie dyrektywy dotyczące obsługi routera routerLink, router-outlet są dostarczane przez ROUTER_DIRECTIVES.
Jeśli nowy dostawca jest zarejestrowany przy użyciu tokena ROUTER_DIRECTIVES, zastępuje on poprzednio zarejestrowane dyrektywy. Jeśli zostanie ustawiony multi: true (pierwszy zarejestrowany i nowy dostawca), nowe dyrektywy zostaną dodane do wcześniej zarejestrowanych dyrektyw zamiast przesłonić.

Po wstrzyknięciu ROUTER_DIRECTIVES wstrzyknięta jest tablica instancji dyrektyw. Zwykle nie ma sensu wprowadzanie ROUTER_DIRECTIVES. Użyłem tego jako przykładu, ponieważ jest to multi: true.

+0

Czy możesz podać przykład, kiedy byłoby przydatne por favor – theFreedomBanana

+1

Zobacz przykład w https: // stackoverflow.com/questions/39033835/angularjs2-preload-server-configuration-before-the-application-starts/39033958 # 39033958 gdzie można podać wiele funkcji fabrycznych w "APP_INITIALIZERS", a Angular wywoła każdą z nich (w kolejności, w jakiej zostały dostarczone)) i czeka na zwrócony 'Promise'. –