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();
}
我試圖瞭解與觀測量的教程,但我沒有找到 怎麼沒有訂閱的可觀測到發佈服務器上的數據。
感謝您的幫助!
這正是我的想法,但你如何解釋。如果我多次嘗試沒有if循環的getdata()方法。我有多個服務試圖讓數據everey 3秒?我在瀏覽器中試過它,它完全是這樣的... –
因爲間隔每3000毫秒產生一個新的呼叫。可以這樣做:'Observable.timeout(3000)'(一次延遲)或'Observable.interval(3000).take(1)' – Meir
但是這是行不通的。也許我的解釋不夠好。我有一個WebApp和一個服務器。 WebApp在VisualCode上的瀏覽器和服務器上運行。在服務器上,我改變了屬於汽車(虛擬)的數據。我在WebApp的html上有一個flipswitch,可以打開和關閉服務器和webapp之間的通信。如果我打開翻頁開關,我會訂閱一個每3秒從服務器接收一次數據的觀察器。如果我切換它的observable應該是canceld。沒有if循環,我會每次創建一個新的可觀察對象。有沒有另一種方法。 –