2016-08-11 12 views
0

AIM:私はang 2からhttpリクエストをjavaサーバーに送信します。それが実行されている間、サーバは進捗ステータスを持つメッセージを生成しますので、私はプログレスバーを更新できます。 AppComponentAppServiceWebsocketServiceサービスからの角度2 - 更新コンポーネントのMVC?

私は3つのエンティティを持っています。 以下は、 WebsocketServiceの簡略化した例です。メッセージトピックを購読し、各メッセージの受信時にいくつかのアクションを実行できます。

export class WebsocketService { 

    private client: Client; 

    constructor() { 
     var service = this; 
     service.client = Stomp.client('ws://localhost:8080/stomp/websocket'); 

     service.client.connect("user", "pass", function() { 
      service.client.subscribe("/progress", function (message) { 
       // some actions here 
      }) 
     }); 
    } 
} 

だから、私の質問は:AppServiceあるいはWebsocketServiceから、テンプレートにバインドされAppComponentのプロパティ(フィールド)の値を、更新する方法?セッターを使用しますか?それはMVCの条件から大丈夫ですか?

答えて

2

これを行う方法は複数ありますが、「件名」ストリームを使用します。ここで

は一例です:

import {Injectable} from '@angular/core'; 
import {Http, Headers, RequestOptions, Response} from '@angular/http'; 
import {Observable} from 'rxjs/Rx'; 
import {Subject} from 'rxjs/Subject'; 
import {NextObserver} from 'rxjs/Observer'; 

export class WebsocketService { 
    public ProcessingMessages$: Observable<string>; 

    private client: Client; 
    private processingMessages: Subject<string>; 


    constructor() { 
     this.processingMessages = new Subject<string>(); 
     this.ProcessingMessages$ = this.processingMessages.asObservable(); 

     var service = this; 
     service.client = Stomp.client('ws://localhost:8080/stomp/websocket'); 

     service.client.connect("user", "pass", function() { 
      service.client.subscribe("/progress", function (message) { 
       this.processingMessages.next(message); 
      }) 
     }); 
    } 
} 

// Sample Component 
@Component({ 
    selector: 'my-component', 
    template: 'WebsocketService Message: {{Message}}', 
}) 
export class Sample Component implements OnInit { 
    public Message: string; 

    constructor(
     private service: WebsocketService 
    ) { 
    } 

    ngOnInit() { 
     this.service.ProcessingMessages$.subscribe((message: string) => { 
      this.Message = message; 
     }); 
    } 
} 
+0

はい、私が観察について考えたが、私は観測に公開する方法を知りませんでした。良い例をありがとう!私はまた、大文字から書いているだけでなく、観察可能な最後に '$'を使用して質問することができますか?それはあなたの好みですか、それとも命名規則のようなものですか? – sinedsem

+0

これは命名規則ですので、それが観測可能なサブジェクトストリームであることがわかります。私はAngular 2のサイトから入手しました。 2つの別々の変数を持つ必要はありませんが、私はそれをもっとうまく好きですが、this.processingMessage.asObservable()を返すサービスの関数を簡単な頂点にして、代わりにそれを購読することができます。 –

+0

この命名規則の使用例は見つかりませんでした。あなたはいくつかのリンクを提供することで私を助けてくれますか? – sinedsem

関連する問題