2017-12-22 27 views
-1

私はいくつかの一般的な質問があります。ページの先頭に戻るmain.ts 経由でonInit私はアレイに保存するmongooseデータベースサーバーからデータを取得しています。親から子に角度データを渡す4

このアレイは、他のコンポーネントでも使用できる必要があります。 service.ts

サービスで私はたくさんのBehaviorSubjectsSubjectsを持っています。したがって、私がmongooseから配列データを取得するたびに、私はサービスにメッセージを送り、他のコンポーネントはそのメッセージを購読します。

私は*ngForを使用していますHTMLのように、それはエラーメッセージをスローし、それは、配列ではなく、文字列「デフォルトのメッセージ」を期待していたので、私は時々Subject代わりのBehaviorSubjectを使用しています。

これは、ページ間でデータを移動するための正しい設定であるかどうか疑問に思っています。 今、私は自分のコンポーネントのアップデートにこのメッセージシステムを使用しています。 誰かが私のウェブサイトにコメントや投稿をすると私は自分のサービスにメッセージを送り、私のサービスにオブザーバブルを更新し、私のコンポーネントはそれを再び購読します。

新しいデータのために私のサイトを更新するより良い方法はありますか?*ngForからこのエラーメッセージが表示されることがある理由を説明する簡単な方法があります。

つまり、オブザーバブルを更新すると、コンポーネントはすぐにメッセージを受信するか、onInitを受信します。

また、コンポーネントのコンストラクタまたはonInitで以下を使用することがベストプラクティスであるかどうかという疑問もあります。 私はOnDestroyを退会します。

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

    .subscribe(message => { 

service.tsなぜあなたはBehaviouSubjectを使用している

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(); 

答えて

1

。私はあなたのケースでは件名が良いと思います。 BehaviouSubjectは、observableを作成しているときに初期値を渡す場合に適しています。

ngForは配列を想定しているため、空の配列をエミットすることで素早く修正することもできます。 「デフォルトメッセージ」から[]に変更してください。

が、それはそう、今、私はコンポーネントにに加入する複数のメッセージを持っている

+0

役立つことを願って、それをやって、またはの正しい方法は、それが通常のメッセージシステムを再利用するということです。あるいは、同じ変数を更新する場合にのみメッセージシステムを再利用するのですか? – oudekaas

+1

再利用可能性はより良いオプションですが、ユースケースによって異なります。新機能があなたのメッセージシステムに導入されるなら、それが維持可能であることを覚えておいてください。 –

関連する問題