8

Ich verstehe, dass Anbieter für den Erhalt von Service aus einer anderen Klasse, aber was ist Multi-Provider und Token Sache?Was ist Multi-Provider in angular2

Und auch wenn wir tun multi=true?

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

Antwort

0

multi: true Verwendung erzählt Angular, dass die Anbieter ein Multi-Provider ist. Wie bereits erwähnt, können wir bei mehreren Anbietern mehrere Werte für ein einzelnes Token in DI bereitstellen.

Verbräuche:

Wenn wir ein paar Richtlinien, die automatisch in unserer gesamten Anwendung, ohne dass jemand zur Verfügung stehen sollen, die sie in der Komponente Dekorationen definieren, wir können das tun, indem Sie die Vorteile von Multi-Anbietern nehmen und sie Was wird für PLATFORM_DIRECTIVES injiziert.

@Directive(...) 
class Draggable { } 

@Directive(...) 
class Morphable { } 

@Component(...) 
class RootCmp { } 

und

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

Details

+0

Was bedeutet es, mehrere Werte für einzelne Token in DI – blackHawk

+0

bereitzustellen. Siehe Beispielcode. Ein Array von Direktiven/Werten in Code einfügen. Die Detailverknüpfung enthält Beispiele und Erklärungen. –

+0

Was bedeutet es, wenn Funktion wie folgt deklariert wird: private get isReverse() was ist get keyword – blackHawk

0

Aus der Dokumentation:

Erstellt mehrere Anbieter die gleichen Token passenden (ein Multi-Provider). Multi-Provider werden zum Erstellen von Pluggable-Diensten verwendet, wobei das System mit einigen Standardanbietern geliefert wird und der Benutzer zusätzliche Anbieter registrieren kann. Die Kombination der Standardanbieter und der zusätzlichen Provider wird verwendet, um das Verhalten des Systems zu steuern.

Source

11

multi: true bedeutet, dass ein Token-Provider eine Reihe von Elementen zur Verfügung stellt. Zum Beispiel werden alle Anweisungen für die Router-Unterstützung routerLink, router-outlet von ROUTER_DIRECTIVES zur Verfügung gestellt.
Wenn ein neuer Provider mit dem Token ROUTER_DIRECTIVES registriert ist, werden die zuvor registrierten Direktiven überschrieben. Wenn multi: true (auf dem ersten registrierten und der neue Anbieter) festgelegt ist, werden die neuen Direktiven zu den zuvor registrierten Direktiven hinzugefügt, anstatt zu überschreiben.

Wenn ROUTER_DIRECTIVES injiziert wird (constructor(@Inject(ROUTER_DIRECTIVES) directives) {}), wird ein Array von Direktivitätsinstanzen eingefügt. Es macht normalerweise keinen Sinn, ROUTER_DIRECTIVES zu injizieren. Ich habe es nur als Beispiel verwendet, weil es multi: true ist.

+0

Könnten Sie ein Beispiel geben, wann es nützlich sein würde, favor – theFreedomBanana

+1

Siehe das Beispiel in https: // stackoverflow.com/questions/39033835/angularjs2-preload-server-configuration-vor-der-application-starts/39033958 # 39033958 wo mehrere Factory-Funktionen unter 'APP_INITIALIZERS' bereitgestellt werden können und Angular wird jeden von ihnen aufrufen (in der Reihenfolge, in der sie bereitgestellt wurden) und wartet auf das zurückgegebene 'Versprechen'. –