8

Comprendo che il provider è in grado di ottenere il servizio da un'altra classe ma che cosa è multi-provider e token?Che cos'è il multi provider in angular2

E anche quando lo facciamo multi=true?

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

risposta

0

Utilizzando multi: true dice angolare che il provider è un multi provider. Come accennato in precedenza, con più provider, possiamo fornire più valori per un singolo token in DI.

Usi:

Se abbiamo un paio di direttive che dovrebbero essere automaticamente disponibili in tutta la nostra applicazione senza che nessuno debba definirli nelle decorazioni dei componenti, possiamo farlo, approfittando di fornitori multipli e che si estende cosa viene iniettato per PLATFORM_DIRECTIVES.

@Directive(...) 
class Draggable { } 

@Directive(...) 
class Morphable { } 

@Component(...) 
class RootCmp { } 

e

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

Details

+0

cosa significa fornire più valori per singolo token in DI – blackHawk

+0

Vedere il codice di esempio. Iniettando una serie di direttive/valori nel codice. Il collegamento di dettaglio ha esempi e spiegazioni –

+0

Che cosa significa se la funzione viene dichiarata in questo modo: private get isReverse() what is get parola chiave – blackHawk

0

Dalla documentazione:

Crea diversi operatori di corrispondenti lo stesso motivo (un multi-provider). I multi-provider vengono utilizzati per la creazione di servizi collegabili, in cui il sistema viene fornito con alcuni provider predefiniti e l'utente può registrare i provider aggiuntivi . La combinazione dei provider predefiniti e dei provider aggiuntivi verrà utilizzata per determinare il comportamento del sistema.

Source

11

multi: true significa che un token erogatori fornisce una matrice di elementi. Ad esempio tutte le direttive per il supporto router routerLink, router-outlet sono fornite da ROUTER_DIRECTIVES.
Se un nuovo provider è registrato con il token ROUTER_DIRECTIVES, sostituisce le direttive registrate in precedenza. Se è impostato multi: true (sul primo registrato e il nuovo provider), le nuove direttive vengono aggiunte alle direttive registrate in precedenza invece di eseguire l'override.

Quando viene iniettato ROUTER_DIRECTIVES (constructor(@Inject(ROUTER_DIRECTIVES) directives) {}) viene iniettata una matrice di istanze direttive. Di solito non ha senso iniettare ROUTER_DIRECTIVES. L'ho usato solo come esempio perché è multi: true.

+0

Puoi dare un esempio di quando sarebbe utile per favore – theFreedomBanana

+1

Vedere l'esempio in https: // StackOverflow.it/questions/39033835/angularjs2-preload-server-configuration-before-the-application-starts/39033958 # 39033958 dove più funzioni di fabbrica possono essere fornite in 'APP_INITIALIZERS' e Angular chiamerà ognuna di esse (nella sequenza in cui sono state fornite) e aspetta la promessa restituita. –