![](/img/trans.png)
[英]How can a mock a http observable in Angular2 for when no api is written
[英]angular2 work with Observable(Http) without reloading
我有一個PartnersService,它在服務器上的合作伙伴數組的構造函數加載列表中。
this.partners = this._http.get('/app/partners/partners.data.json')
.map(this.extractData)
.catch(this.handleError);
當我得到合作伙伴列表時,一切正常。 但是我需要通過ID獲得伙伴。 在這種情況下,我將函數與回調一起使用
getPartner(id:number, callback:(partner:Partner)=>void):void {
this.partners.subscribe(partners=> {
for (let partner of partners) {
if (partner.id == id) {
callback(partner);
}
}
});
}
在瀏覽器控制台中,我看到無論何時我調用subscribe
,angular2將請求發送到服務器。 我可以做些什么來不發送請求嗎? 也許存在更好的方法來創建getPartner()
函數(不getPartner()
)?
您可以嘗試這樣的事情:
getPartners() {
if (this.partners) {
return Observable.of(this.partners);
} else {
return this._http.get('/app/partners/partners.data.json')
.map(this.extractData)
.catch(this.handleError)
.do(partners => {
this.partners = partners;
});
}
}
getPartner(id:number):Observable<partner> {
this.getPartners().map(partners => {
return partners.find(partner => (partner.id == id));
});
}
並以這種方式執行方法:
this.service.getPartner('some id').subscribe(partner => {
console.log(partner);
});
您也可以使用publishLast()
捕獲事件。
constructor() {
this.partners = this._http.get('/app/partners/partners.data.json')
.map(this.extractData)
.catch(this.handleError)
//shares the subscription with all observers so you don't get repeated
//calls and caches the result.
.publishLast();
//Initiates the http call
this.connection = this.partners.connect();
}
getPartner(id:number):Observable<partner> {
return this.partners
//Convert Observable<partner[]> to Observable<partner>
.flatMap(x => x)
.filter(p => p.id === id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.