我有一個服務「MyHttpService」,其包括可觀察到的是這樣的:如何在多個組件中重用角度可觀察性? (爲了避免重複的請求兩次?)
grabData() {
return this.http.get('myaddress')
.map((res:Response) => {return res.json()})
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
我有2個部件。 OneComponent和TwoComponent都注入了「MyHttpService」,這取決於MyHttpService返回的數據。
OneComponent首先加載。按鈕單擊後,TwoComponent加載。
內onNgInit()每個組件的我:
this.myHttpService.grabData()
.subscribe(
data => {
// do something to the data
});
它是正確的假設,即使我有這個認購的兩個組成部分,有不會是所謂的多個HTTP請求和當TwoComponent加載時,對「grabData()」的調用與OneComponent已經提取的數據相同嗎?或者它會發起一個新的呼叫?我想避免多個HTTP請求到同一個端點。如果每次調用具有此功能的組件時都進行多個調用,那麼處理此問題的最佳方法是什麼?以便每次初始化TwoComponent時都不會有多次調用該服務?
_和最後一個取消訂閱清理原來的Http observable._ - 正確,所以如果一些其他訂閱被做'HTTP'請求再次執行,正確?所以基本上http請求的結果將被共享,直到至少有用戶,然後請求會被重複。 'AsyncSubject'似乎是更好的選擇,你怎麼看? –
@Maximux,你能分享一下AsyncSubject方法的意思嗎?基於我在使用上述方法時看到的情況,看起來像當我單擊按鈕時,客戶端使用同一個服務「grabData()」發出第二個請求,而不是使用共享/第一個「緩存」值請求。 – Rolando