2017-08-10 2 views
3

Nehmen wir an, wir haben eine tief verschachtelte Architektur mit einer Hauptkomponente und drei Schichten von Subkomponenten. Zum Beispiel:Angular EventEmitter vs. Kommunikation über Service

todo->todo list->todo list action bar->todo list button 

Es wird auch andere Komponenten geben.

Wenn wir EventEmitter verwenden, müssten wir alle Schichten bis zur Todo-Komponente durchlaufen. Die Alternative wäre, einen Kommunikationsdienst mit einer Observablen zu haben, um von der Knopfkomponente mit der Todo-Komponente zu kommunizieren.

Was sind die Höhen und Tiefen, um die eine oder andere zu verwenden? Welchen Weg soll ich gehen?

Antwort

2

Dies ist eine Design-Perspektive.

Im Allgemeinen, was ich herausgefunden habe, ist, wenn die Anwendungsgröße mittel bis sehr groß ist, gehen Sie dann für Shared Services entweder Behaviour Subject oder Replay Subject, um Nachricht an andere Komponenten zu übertragen.

Und noch besser Design ist für ngrx i: e mit Redux in Angular gehen. Der einzige Nachteil ist der zusätzliche Code, den Sie für Ihre Aktionen und Reduzierungen schreiben müssen, aber das Plus ist die ganze Logik ist von den Komponenten getrennt, die in redux Welt als dumme Komponenten bekannt sind. Sobald es fertig ist, wird es ein Lebensretter sein, der ngrx dev tools verwendet, um den Zustand zu jedem Zeitpunkt zu verfolgen, und es wird Ihnen leicht sein zu verfolgen, welches Ereignis oder welche Aktion ausgelöst wird, wann und wie Sie den Code debuggen und ergänzen.

Nur wenn Ihre App-Größe klein ist, werde ich vorschlagen, dass Sie mit Event-Emittern gehen, wie mit mehreren verschachtelten Komponenten, die Sie in einem Spaghetti-Code verschlingen. Sie können nicht alle Abfeuerungsereignisse verfolgen und dann schreiben Sie Ihren Code.

Mehr über die Verwendung von Ereignis-Emitter vs Shared Services LINK. Es gibt eine spezielle Frage nur dafür.

Mehr auf ngrx LINK. Dieser Link verwendet ngrx v2.

Ich habe auf einer kleinen App NGRX v.4 und das folgende ist das git-Repo für den gleichen git und der Arbeits arbeitete example

Verwandte Themen