2017-02-09 127 views
0

我有幾個關於Http.post和Http.get與 Observable的問題。我是一名學生,我正在嘗試編寫一個簡單的WebApp和一個服務器。Angular 2,Observable:http.post,http.get

我想發佈一個布爾值在我的服務器上,如果我按下按鈕。 過程確實有效,但每次按下按鈕時,我都會再次訂閱觀察值。我和我的http.get方法有同樣的問題,並用這段代碼解決了這個問題。

getdata() { 
if(this.subscribtion2 === null){ 
     this.isValid = false; 
     this.subscribtion2 = this.service.get2().subscribe(

     daten => { 
      this.jsonobj = daten; 
      this.message = 
       [ 
       this.jsonobj.data.message1, 
       ]; 
      console.log('subscribe') 
      ; 
      this.myModelneu = this.message[0];  
      },  
     err => this.handleError(err), 
     () => console.log('Simple GET completed') 
      ); 

    }else 
    { 
     this.isValid = true; 
     console.log('unsubscribe') 
     this.subscribtion2.unsubscribe(); 
     this.subscribtion2 = null; 

    } 
} 

get2()方法位於不同的類中。

get2() { 


     return Observable.interval(3000) 
      .switchMap(() => this.http.get('http://127.0.0.1:3000/daten/2')) 
      .map(res => res.json()) 

    } 

我不認爲這是常見的方式,但我找不到另一種。 我http.post看看喜歡這樣的:

post(json: boolean) { 
     console.log('post executed'); 
     console.log(JSON.stringify(json)); 

    return this.http.post('http://127.0.0.1:3000/login', { json }) 
    .subscribe(); 

    } 

我試圖瞭解與觀測量的教程,但我沒有找到 怎麼沒有訂閱的可觀測到發佈服務器上的數據。

感謝您的幫助!

回答

2

http撥打電話,特別是getpost返回一個可觀察到的結果,因此您不需要退訂。完成後,訂閱將被終止。

+0

這正是我的想法,但你如何解釋。如果我多次嘗試沒有if循環的getdata()方法。我有多個服務試圖讓數據everey 3秒?我在瀏覽器中試過它,它完全是這樣的... –

+0

因爲間隔每3000毫秒產生一個新的呼叫。可以這樣做:'Observable.timeout(3000)'(一次延遲)或'Observable.interval(3000).take(1)' – Meir

+0

但是這是行不通的。也許我的解釋不夠好。我有一個WebApp和一個服務器。 WebApp在VisualCode上的瀏覽器和服務器上運行。在服務器上,我改變了屬於汽車(虛擬)的數據。我在WebApp的html上有一個flipswitch,可以打開和關閉服務器和webapp之間的通信。如果我打開翻頁開關,我會訂閱一個每3秒從服務器接收一次數據的觀察器。如果我切換它的observable應該是canceld。沒有if循環,我會每次創建一個新的可觀察對象。有沒有另一種方法。 –