2017-10-03 11 views
0

私はAngularで簡単なチャットアプリケーションを実装しました。私は@stomp/ng2-stompjsからストンプソケットを使用しています。私はすべてのmeesagesを表示するのに*ngForを使用しています。新しいデータに角度レンダリング

<p *ngFor="let item of messages" style="padding: 5px; font-size: 18px"> 
    <span style="color:darkturquoise">{{item.author}}</span>: {{item.message}} 
    </p> 

しかしmessages変数が更新されたときに(私はにconsole.logを見ることができます)、*ngForを再描画しません角度。

this.subscription = this.messagesObs.subscribe((message: Frame) => { 
    this.messages = <ResponseMessage[]>JSON.parse(message.body).slice(); 
    console.log(this.messages); 
}); 

私はthis.changeDetector.detectChanges();を試しましたが、それは役に立ちません。 これはフレームワークのデフォルト動作ですが、各サブスクリプション後に*ngForをレンダリングする方法はありますか?

更新:

私はplunker例を作りました。バックエンドがlocalhost上にあるので、例は機能しません。

答えて

0

rxjs map演算子とasyncパイプを使用してデータを購読することができます。また、コンポーネントが破棄された場合、パイプはサブスクリプションがクリアされることを確認します。

public messages$: Observable<ResponseMessage[]> = this.messagesObs.map((message: Frame) => { 
    return JSON.parse(message.body) as ResponseMessage[]; 
}); 

そして、あなたのコンポーネントで

ビュー:

<p *ngFor="let item of messages$ | async" style="padding: 5px; font-size: 18px"> 
    <span style="color:darkturquoise">{{item.author}}</span>: {{item.message}} 
</p> 
+0

この作品を部分的にしか。私がメッセージを送信すると、データが来ます(コンソールで見られます)が、ngForはレンダリングされません。私は別のメッセージをタイプし始めます。 – TomP

+0

'messagesObs'はどのように見えますか?そして、あなたは変化検知の戦略として 'onPush'を使っていますか? – cyrix

+0

このhttps://pastebin.com/gQbUb26hは私の.component.ts です。このhttps://pastebin.com/YDN179F7は私の.htmlです 私はOnPushを試しましたが、助けにはなりません:) – TomP

関連する問題