2016-06-29 6 views
1

Ich möchte eine einzelne Instanz eines Objekts mit einer large external API erstellen und teilen Sie es unter mehreren Komponenten meiner App.Wie kann man am besten mit einer großen externen API umgehen, so dass eine einzelne Instanz von mehreren Komponenten gemeinsam genutzt werden kann?

Diese API verfügt über mehrere Ereignismethoden (z. B. onJoin(), onClose(), onOpen() usw.), die ich implementieren muss. Da verschiedene Ereignisse mit verschiedenen Komponenten meiner App verknüpft sind, habe ich darüber nachgedacht, diese Ereignisse in diesen Komponenten zu implementieren und nicht alle innerhalb einer Singleton-Klasse.

Alternativ habe ich mich gefragt, ob ich sollte - oder sogar könnte - jeder dieser Event-Methoden ein benutzerdefiniertes Ereignis mit EventEmitter erstellt haben, und Listener-Methoden in jeder der relevanten Komponentenklassen bereit, diese Ereignisse zu behandeln. Aber es scheint, dass EventEmittercan only be used by components and directives, nicht einfache Klassen.

Eine andere Sorge ist, ob ich eine Singleton-Klasse für dieses Objekt erstellen oder es als eine Art 'Service' behandeln und es in die abhängigen Komponenten injizieren sollte.

Jede Hilfe wird sehr geschätzt!

Dank

+2

Ich würde einen 'Service' empfehlen, um die Netzwerkanrufe zu machen, auch ist es gut für Caching. – AngJobs

Antwort

0

Statt EventEmitter zu verwenden, die nach einiger Versuch und Irrtum Ich arbeite nicht entdeckt (Funktion der Ereignisrückruf wurden spät genannt zu werden, oder überhaupt nicht), ich die Callback-Funktionen innerhalb des externen implementiert Bibliothek. Diese Anfangsfunktionen verwenden window.dispatchEvent (event), um ein CustomEvent zu senden und dessen ursprünglichen 'event'-Parameter zu übergeben. Dieses Ereignis kann dann mit @HostListener ('window: onWhatever', ['$ event']) in meiner App abgeholt werden.

Here ist, woher ich diese Lösung habe.

Ich habe auch einen Service verwendet, um das externe Bibliotheksobjekt zu initialisieren und seine Funktionen und Optionen einzukapseln. Dieser Ansatz scheint gut zu funktionieren.