Javascript 有没有办法保存HTTP响应数据以避免调用HTTP服务?

Javascript 有没有办法保存HTTP响应数据以避免调用HTTP服务?,javascript,angular,typescript,http,ionic-framework,Javascript,Angular,Typescript,Http,Ionic Framework,我会尽我所能解释清楚,这是我有史以来的第一款Ionic应用程序 我的目标是创建一个简单的仪表板,其中包含从JSON文件获取的一些类别,调用Cordova HTTP本机服务。 单击仪表板中的一个类别时,它应根据通过[routerLink]指令发送的特定ID参数加载另一个仪表板中的类别 它按预期工作,但当我点击“后退”按钮并返回主仪表板时,如果我单击相同的类别,则会触发ngOnInit()方法,http服务将再次获取数据 我希望单击一个类别并仅在第一次调用http服务(如果尚未获取特定类别的数据),

我会尽我所能解释清楚,这是我有史以来的第一款Ionic应用程序

我的目标是创建一个简单的仪表板,其中包含从JSON文件获取的一些类别,调用Cordova HTTP本机服务。 单击仪表板中的一个类别时,它应根据通过[routerLink]指令发送的特定ID参数加载另一个仪表板中的类别

它按预期工作,但当我点击“后退”按钮并返回主仪表板时,如果我单击相同的类别,则会触发ngOnInit()方法,http服务将再次获取数据

我希望单击一个类别并仅在第一次调用http服务(如果尚未获取特定类别的数据),而在第二次单击该类别时仅显示该数据

我已经试着检查这个.category\u源,但可能每次我点击“后退”按钮时组件都会被破坏,数据也会丢失

  ngOnInit() {
    this.retrieveID();
    console.log("OnInit");
    this.presentLoading();
    this.CategoryCtrl();
  }

  retrieveID() {
    this.sub = this.route.params.subscribe(params => {
      this.id = +params['id'];
    });
  }

  CategoryCtrl() {
    if (this.category_sources) {
      console.log("Data already existing");
      this.stopLoading();
    } else {
    this.serverService.getReviewsCategory(this.id)
    .subscribe((data) => {
      this.fetched = true;
      this.category_sources = data['reviews'];
      this.info = data['info'];
      this.banner = data['banner'];
      this.fetched = true;
      this.stopLoading();
    });
  }
}

  backClicked() {
    console.log("Back clicked");
    this.location.back();
  }

  async presentLoading() {
    const loadingController = this.loadingController;

    const loadingElement = await loadingController.create({
      spinner: 'crescent',
    });
    return await loadingElement.present()
  }

  async stopLoading() {
    return await this.loadingController.dismiss();
  }

}

我有一个想法,你可以使用:(设置,获取)数据点击成功后,保存本地存储 让data=localStorage.setItem('categories'); 让data=localStorage.getItem('categories')

//前端安古拉
类别:any={}
构造函数(){
//检查本地存储的类别
让dataCatogories=localStorage.getItem('categories');
如果(dataCatogories.length>0){
//你可以在这里处理
this.categories=数据类别;
}
}
//单击类别
getAllCatogories=()=>{
this.http.get('APP_URL')。订阅(item=>{
setItem(“类别”,项);
}

}
您可以创建一个全局服务来处理缓存,无需本地存储,只需将数据保存在内存(对象)中,这样当应用程序关闭时,数据就会消失


CashingService将用于发送/接收数据的代码移动到服务中,在服务内部缓存数据,并使用此缓存数据,而不是向web服务器发送新请求()。另一种方法是使用http拦截器。我这里有关于同一主题的答案,谢谢大家!@malbarmawi,缓存服务工作得很好!!我只有最后一个问题…我有一个LoadingController,我曾经在ngOnInit方法中呈现Loading()和stopLoading()在订阅主体中。当它从Http服务获取数据时(第一次)工作,但当数据来自缓存时,微调器不会停止其执行..在这种情况下,订阅正文不会执行,因此微调器会继续加载,并且从不关闭..我希望仅在第一次http调用期间加载微调器,并且不再显示它,但ngOnInit始终会执行并呈现加载()具有it@Federico我已经根据您的案例添加了一个答案,您不需要检查数据是否缓存在服务器服务类中,它将处理这个我遵循了您编写的所有内容,它工作正常,“后退”按钮也工作正常,但是如果我单击“主页”在我的选项卡中创建了一个新实例,因此再次调用服务,即使数据来自缓存,也需要很长时间才能完成请求。我没有连接问题,因此我不知道问题出在哪里。。。