2017-12-07 1 views
0

Ich versuche einen globalen Dienst in eckiger App mit BehaviorSubject zu erstellen.Angular 4 - BehaviourSubject gibt keine JSON-Daten zurück

Ich habe eine Methode in diesem Dienst erstellt, wo ich eine HTTP-Get-Methode definiert und JSON-Datei geladen habe.

Nun ist die Frage, die ich bin vor ist, wenn ich diese BehaviourSubject als asObservable in jeder Komponente der Zeichnung und das Ergebnis auf eine bestimmte Variable in der Skript-Datei zuweisen, macht die HTML-Vorlage diesen Wert korrekt über strukturierte Richtlinie *ngFor aber wenn Ich versuche, den gleichen Wert in der Typoskript-Datei zu bekommen, es funktioniert nicht.

Zum Beispiel;

Wenn ich versuche, diesen Wert zu drucken

console.log(this.data.boxes.length); 

dann gibt es mir einen Fehler

[ERROR TypeError: Cannot read property 'length' of undefined]

und wenn ich versuche, diesen Wert zu drucken, ohne Länge

console.log(this.data.boxes); 

es gibt mir einen richtigen Wert eines Arrays in der Konsole.

Jetzt, wenn ich BehaviorSubject zu Subject ändern, dann funktioniert es gut, ich bekomme auch length Wert.

Allerdings möchte ich BehaviorSubject anstelle von Subject verwenden.

Was mache ich falsch und wie kann ich es erreichen?

+0

Mein erster Gedanke ist, dass BehaviourSubject nur Sie den letzten Wert zurück, ist also, warum man nicht lang sein könnte, weil es Rückkehr ein einzelner Wert. Gibt es einen bestimmten Grund dafür, ein BehaviourSubject anstelle eines regulären Subjekts zu haben? –

+0

Es wäre hilfreich, mehr Code in diesem Beispiel zu haben. Es ist schwer sich vorzustellen, was Sie hier vorhaben. Können Sie die entsprechenden Code-Snippets bereitstellen? –

Antwort

0

Verhalten aktuellen Objekt-Wert aussendet auch an Teilnehmern, wenn das Motiv nicht weiter vor der Zeichnung genannt wird, mit anderen Worten:

Ihr Abonnement Thema vor dem ersten „next“ Wert gezeichnet wird. Ich nehme an, dass der Anfangswert des Verhaltens-Subjekts nicht definiert oder ähnlich ist, so dass der erste Wert, der an den Abonnenten ausgegeben wird, einen Fehler verursacht. Könnten Sie Erklärung Thema überprüfen und sicherzustellen, dass Anfangswert in der richtigen Form, wie:

public exampleSubject = new BeahviourSubject<yourType[]>(<yourType[]>[]); 
Verwandte Themen