2017-12-07 13 views
0

BehaviorSubjectの角型アプリケーションでグローバルサービスを作成しようとしています。角4 - BehaviourSubjectが適切にjsonデータを返さない

私はHTTP getメソッドを定義しJSONファイルをロードするこのサービスでメソッドを作成しました。

今、私は任意のコンポーネントにasObservableとしてこのBehaviourSubjectをサブスクライブし、typescriptファイル内の特定の変数に結果を代入していたとき、私が直面してる問題があり、HTMLテンプレートは、構造化指令*ngForを経由してこの値を正しくレンダリングするが、とき私はtypescriptファイルで同じ値を取得しようとしていますが、動作しません。

たとえば、

私は

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

この値を印刷しようとしている、それは私にエラー

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

と私は長さ

console.log(this.data.boxes); 
せずにこの値を印刷しようとしています

これはコンソールパネルに適切な配列の値を与えます。

は今、私はまたlength値を取得していますBehaviorSubjectSubjectに、その作業罰金手段を変更した場合。

Subjectの代わりにBehaviorSubjectを使用します。

私は間違っていますが、どのように達成できますか?

+0

私が最初に考えたのは、あなたが長さを持っていない可能性がありますなぜそれが戻っだからですのでBehaviourSubjectだけで、あなたの最後の値を返すということです単一の値。 BehaviourSubjectを通常のSubjectの代わりに使いたい特定の理由はありますか? –

+0

この例では、より多くのコードを持つと便利です。ここで何をしようとしているのかを視覚化するのは難しいです。関連するコードスニペットを提供できますか? –

答えて

0

行動対象は、他の言葉で、被験者は次のサブスクリプションの前に呼び出されていない場合でも、加入者の現在値を放出している:

あなたのサブスクリプションは、「次の」最初の値の前に被験者に加入しています。私は、動作サブジェクトの初期値が未定義であるか、または類似していると仮定して、サブスクライバに放出される最初の値がエラーを引き起こすようにします。 はあなたが主題の宣言を確認し、初期値が正しい形式であることを確認する、のようでした:

public exampleSubject = new BeahviourSubject<yourType[]>(<yourType[]>[]); 
関連する問題