2017-08-25 1 views
0
registrieren

Überall wird empfohlen, einen Dienst im Array root AppModule providers zu registrieren und die Verwendung von providers root AppComponent zu vermeiden. Wann sollte jemand einen Dienst in root AppComponent registrieren? Jedes praktische Beispiel. Welchen Vorteil hat die Registrierung des Dienstes im root AppModule im Vergleich zur root AppComponent?Dienst im Stammverzeichnis AppModule oder root AppComponent

Antwort

4

Bei der Registrierung im Stammverzeichnis wird der bereitgestellte Dienst als Singleton erstellt. Im Gegensatz zur Bereitstellung in der Komponente werden so viele Instanzen erstellt, wie Sie die Komponente verwenden.

Mit anderen Worten:
Der Service auf der Stammebene eingespritzt wird in der gesamten Anwendung zugänglich sein.
Der auf Komponentenebene bereitgestellte Dienst ist nur für diese Komponente und ihre untergeordneten Elemente verfügbar.

Wenn Sie den Dienst in mehrere Komponenten injizieren (@Component({ ...providers: [] ..}), erhält jeder seine eigene Instanz und ihre untergeordneten Elemente teilen dieselbe Instanz.
Wenn Sie in Root-Ebene injizieren (@NgModule({ ... providers: []}), werden alle Komponenten die gleiche Instanz teilen.

mehr here

+0

Willst du sagen, dass, wenn man einen Dienst im Array root AppComponent providers registriert, es nicht für die gesamte Anwendung verfügbar sein wird? Wenn nicht, wie macht es einen Unterschied, wenn Sie in root AppModule registriert sind? –

+0

Ja sagte nur das Gegenteil: Der auf der Root-Ebene injiziert wird in der gesamten Anwendung zugänglich sein. – Vega

+0

Ich bin jetzt verwirrt. Wenn ich einen Dienst für root AppComponent anstelle von root AppModule registriere, ist er dann für die gesamte Anwendung verfügbar oder nicht? Bitte klären Sie. –

-2

Lesen Sie keinen Dienst in eine Komponente registrieren. Jeder Dienst muss in einem Modul registriert werden.

@NgModule({ 
    imports: [ 
     CommonModule, 
     etc 
    ], 
    declarations: [ 
     AppComponent, 
     Other components and stuff related to this module 
    ], 
    exports: [ 
     What you want to export if this module is imported by another 
    ], 
    providers: [ 
     YourService 
    ] 

Zum Beispiel habe ich alle meine Dienste in „Coremodule“ und ich importieren nur die Coremodule in AppRoot.

Ich hoffe, mit dieser Antwort zu helfen.

+0

Wir können einen Dienst im Provider-Array einer Komponente registrieren. Du liegst also falsch. –

Verwandte Themen