我正在尝试在Angular应用程序中为http服务实现缓存。
我的服务代码 countriesService
public get(): Observable<any> {
return this.http.get(`/countries`, {})
.map(res => res.json())
.publishReplay(1)
.refCount();
}
在 CountriesComponent 组件中,我有
ngOnInit() {
this.countriesService.get()
.subscribe(res => {
this.countries = res.countries;
});
}
我正在路由配置中加载组件
const appRoutes: Routes = [
{ path: 'countries', component: CountriesComponent },
{ path: 'cities', component: CitiesComponent },
];
每当我从城市返回国家/地区时,我都会看到=>&gt;的请求/国家。它不应该激活请求,因为它应该被缓存(这是它在角度1.x中使用promises的工作方式),而不是角度4和rxJs。
答案 0 :(得分:13)
您可以在重新使用服务变量之后首次保存服务中的国家/地区。
public get(): Observable<any> {
if(this.countries != null)
{
return Observable.of(this.countries );
}
else
{
return this.http.get(`/countries`, {})
.map(res => res.json())
.do(countries => this.countries = countries )
.publishReplay(1)
.refCount();
}
}