我正在尝试实现离线模式,我做过类似的事情。
在我的Page.ts
文件
getnews() {
this._newsservice.GetNews(this.NewsFilterOptions).subscribe(res => {
this.newsArray = res;
this.loadingnews = false;
},
err => {
this.loadingnews = false;
},
() => {
});
}
在我的Service
档案
GetNews(FilterOptions: any) {
return this.utilitiesService.Get("news" + this.QueryBuilder(FilterOptions));
}
我的Utilities
档案
public Get(endUrl: string) :Observable<any> {
if (this._AppConfig.IsOnline) { // If Online Get From Server
...
return this.http.get(this.baseUrl + endUrl, options)
.map(response => {
//SAVE HTTP RESPONSE TO DICTIONARY
this._OfflineService.Set(this.baseUrl + endUrl, response);
return response.json()
});
}
else {
this._OfflineService.Get(this.baseUrl + endUrl).then(val => {
return Observable.of(val).map(o => o.json());
}).catch((err) => {
return Observable.throw("ERROR");
});
// FETCH HTTP RESPONSE FROM DICTIONARY
//return Observable.of(Data).map(o => o);
}
}
离线Service
:我正在使用Ionic LocalStorage
。
Get(endUrl: string) {
// Or to get a key/value pair
return this.storage.get(endUrl);
}
Set(endUrl: string , data: any) {
// Or to get a key/value pair
this.storage.set(endUrl,data).then((val) => {
});
}
现在在线模式工作正常,但是当应用程序离线时,我正在接受
虽然我正在返回可观察的内容,但无法读取未定义的属性subscribe
。
答案 0 :(得分:1)
在return Observable.fromPromise(this._OfflineService.Get(this.baseUrl + endUrl))
.map(val => val.json())
.catch((err) => {
return Observable.throw("ERROR");
});
功能中,其他部分:
map
这会将promise转换为observable,你可以使用function topFunction() {
document.body.scrollTop=0 ;
document.documentElement.scrollTop =0 ;
}
来解析json并最终订阅。