2017-12-22 8 views
-1

Ich habe einige allgemeine Fragen, ich beginne von auf Seite main.ts Über onInit Ich ergreife Daten von einem Mungo-Datenbank-Server, die ich in einem Array speichern.Weitergabe von Daten von Eltern zu Kind Winkel 4

Dieses Array muss in anderen Komponenten verfügbar sein. Die Art, wie ich dieses Recht jetzt tun, die unter Verwendung eines service.ts

Im Dienst Ich habe viel BehaviorSubjects und Subjects scheint zu funktionieren. Wenn ich also die Array-Daten von Mungo bekomme, sende ich eine Nachricht an den Dienst, und die anderen Komponenten abonnieren diese Nachricht.

ich manchmal Subject bin mit statt BehaviorSubject weil es Fehlermeldungen wie in HTML wirft Ich verwende *ngFor und erwartet ein Array, keinen String ‚Standardmeldung‘.

Ich frage mich nur, ob dies ein richtiges Setup ist, um Daten zwischen den Seiten zu verschieben. Momentan benutze ich dieses Nachrichtensystem auch für Updates zu meiner Komponente. Also, wenn jemand einen Kommentar oder einen Beitrag auf meiner Website macht, sende ich eine Nachricht an meinen Dienst, die wiederum eine beobachtbare aktualisiert und meine Komponente wieder abonniert.

Gibt es bessere Möglichkeiten, um meine Website für neue Daten zu aktualisieren und gibt es eine einfache Möglichkeit zu erklären, warum ich manchmal diese Fehlermeldung von *ngFor bekomme und in anderen Fällen nicht diesen Fehler wirft, während immer noch *ngFor verwenden.

d. H. Wenn ich ein Observable aktualisiere, erhält die Komponente die Nachricht sofort oder erhält onInit.

Mit diesem auch die Frage, ob es Best Practice ist, die unten im Konstruktor der Komponente oder onInit zu verwenden. Ich melde mich ab OnDestroy.

this.newService.currentMessageComment 
    .takeWhile(() => this.alive) 

    .subscribe(message => { 

service.ts

public messageSourceMarketCap = new BehaviorSubject<any>('default message'); 
currentMessageMarketCap = this.messageSourceMarketCap.asObservable(); 

public messageSourceHistory = new Subject<any>(); 
currentMessageHistory = this.messageSourceHistory.asObservable(); 

public messageSouceApi = new BehaviorSubject<any>('default message'); 
currentMessageApi = this.messageSouceApi.asObservable(); 

public messageSourceBody = new BehaviorSubject<any>('default message'); 
currentMessageBody = this.messageSourceBody.asObservable(); 

Antwort

1

Warum verwenden Sie BehaviouSubject. Ich denke in Ihrem Fall wird Thema besser sein. BehaviouSubject passt für den Fall, dass Sie einen Anfangswert übergeben und gleichzeitig Observable erstellen möchten.

Sie können auch schnell beheben, indem Sie ein leeres Array ausgeben, da ngFor ein Array erwartet. Wechsel von "Standardnachricht" zu [].

Hoffnung wird es

+0

So jetzt helfe ich mehrere Nachrichten haben, die ich in einer Komponente abonnieren ist, dass der richtige Weg, es zu tun, oder es normal ist, das Meldesystem wieder zu verwenden. Oder verwende ich das Nachrichtensystem nur dann erneut, wenn ich dieselbe Variable aktualisiere? – oudekaas

+1

Wiederverwendbarkeit ist die bessere Option, aber es hängt von Ihrem Anwendungsfall ab. Schreiben Sie immer Programme, um zu beachten, dass es gewartet werden kann, wenn ein neues Feature in Ihrem Nachrichtensystem eingeführt wird. –

Verwandte Themen