2017-07-07 3 views
0

Ich dachte, ich verstehe Eckige Module, habe aber Schwierigkeiten, den besten Ansatz für die Strukturierung von Modulen zu finden, die Dienste und Komponenten einer Bibliothek beinhalten.Ansätze zu Diensten und Komponenten in von Bibliotheken bereitgestellten winkelförmigen Modulen

Die Bibliothek implementiert eine NotificationsComponent, die von einer NotificationsService abhängt, die ein Singleton sein muss, da sie Benachrichtigungsinformationen persistiert. Der Verbraucher möchte die NotificationsComponent in verschiedenen Seiten verwenden, von denen einige in einem AdminPagesModules sind, und andere sind in einem BookPagesModule.

die in der Bibliothek sagen Let definiere ich eine NotificationsModule, die „erklärt“ und „Exporte“ NotificationsComponent und „liefert“ NotificationsService. Wenn ich nun dieses Modul sowohl in AdminPagesModule als auch in BookPagesModules importiere, damit Seiten in diesen Modulen NotificationComponent verwenden können, bekomme ich separate Instanzen der NotificationsService, die nicht funktionieren werden. Auf der anderen Seite, wenn ich NotificationsModule in meinem AppModule importiere, gelingt es mir sicherzustellen, NotificationsService ist ein Singleton in der ganzen App verwendet, aber ich kann NotificationsComponent innerhalb der Komponenten innerhalb der einzelnen Feature-Module wie AdminPagesModule nicht sehen.

Ich habe ein Muster gesehen, wo ein Modul ein anderes Modul importiert und es dann wieder exportiert. In diesem Fall würden wir NotificationsModule in AppModule importieren und dann erneut exportieren und anschließend NotificationsModule erneut in importieren. In diesem Fall wird NotificationsService ein Singleton über die App sein, wie ich will, noch NotificationsComponent immer noch verfügbar für Komponenten innerhalb AdminPagesModule?

Oder gibt es einen Ansatz für dieses Problem mit dem SharedModule Muster?

Antwort

0

Am besten, Singleton-Dienste in eine separate ts-Datei zu setzen und einmal und nur einmal in AppModule oder SharedModule zu importieren und nicht das Komponentenmodul (z. B. Bibliothek). Komponenten, die in Modulen deklariert sind, die in AppModule importiert werden, sind in Vorlagen in der gesamten App verfügbar und müssen nicht erneut deklariert oder exportiert werden.

Siehe auch https://stackoverflow.com/a/39665993/3103979

Beispiel von Dienstleistungen in einer SharedModule bereitgestellt:

export class SharedModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: SharedModule, 
     providers: [ 
     ... 
     ApiService, 
     Auth, 
     ... 
     ] 
    }; 
    } 
} 
Verwandte Themen