2016-12-01 55 views
0

我有一個角2服務。 現在,我必須從服務器獲取一些對象,只要它們不存在。如何僅在第一次獲取數據時才發送http請求?

因此,我第一次做一個http請求,然後將數據存儲在服務中定義的變量中。對於後續的請求,我只是從變量傳遞數據。

什麼是在angular 2 styleObservables做到這一點的理想方法。

回答

0

包裝你http請求成可注射的服務,並使用副作用操作者做(),例如,

@Injectable() 
export class DataService{ 

    mydata: Array[]; 

    constructor(private http:Http){} 

    loadData(): Observable | any { 
     if (this.mydata){ 
      return this.mydata; // return from cache 
     } else 
     { 
      return this.http.get("./mydata.json") 
       .map(res => res.json()) 
       .do(data => this.mydata = data); 
     } 
    } 
} 

從組件調用loadData()。它只會在mydata爲空時發出http請求。

+0

但是用這種方法,返回類型是不同的。在那種情況下,我的調用函數將如何決定它是訂閱observable還是會獲得數組? –

+0

如果您願意,可以將數組轉換爲Observable: return Observable.from(this.mydata) –

0

你可以這樣做:

observable.first().subscribe(yourFunc); 

這隻會調用一次訂閱功能。

相關問題