缓存angular2 Html页面及其ngOnInit方法

时间:2016-06-30 13:51:06

标签: angular

我正在使用angular2 web应用程序中的标签。我有三个包含用户个人资料信息的标签。

第一个标签包含我称之为API的数据的用户个人信息

第二个标签包含也来自API的用户订阅信息

但我面临的问题是,当我更改标签时,我的api每次都会被调用。这是不正确的。

我已经使用了这两个

.share() and .cache()

方法并且还在ngOnInit函数中编写了我的代码,但是每当我更改选项卡时,我的api都会被调用。 任何人都可以帮我缓存视图或其ngOnInit方法。

1 个答案:

答案 0 :(得分:0)

也许为时已晚。 但是,在Angular2应用程序的整个生命周期中,在组件中保留缓存的一种简单方法是在服务中使用存储变量。



private myObject:any; 
  
  constructor(private _dataService: DataServiceService) { 
  }
  ngOnInit() {
    //Recover Cache from the servicies
    // IF cache==null THEN getAPI
    // ELSE get chache from the service
   if(this._dataService.storage["myObject"] == null){
      this.getMyObject(); 
    }else{
      this.myObject = this._dataService.storage["myObject"];
    }
  }
  ngOnDestroy(){
    // STORE CACHE in the service BEFORE DESTROY the COMPOMENT
    this._dataService.storage["myObject"] == null ? this._dataService.storage["myObject"] = this.myObject : this.myObject = this._dataService.storage["myObject"];
  }
  getMyObject(){
    
    this._dataService.getAPI("YOURAPI").subscribe(
        (p:any)=>this.myObject = p,
        (error) => console.log(error)
      );
  }






   public storage;

   constructor(private http: Http) {
     this.storage ={};
   }




所以,我假设你每次在组件之间进行更改时都想调用API调用,这对我有用。