Http服务缓存

时间:2017-06-21 16:59:57

标签: angular http caching rxjs

我正在尝试在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。

1 个答案:

答案 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();
        }
    }