我正在使用angular2 web应用程序中的标签。我有三个包含用户个人资料信息的标签。
第一个标签包含我称之为API的数据的用户个人信息
第二个标签包含也来自API的用户订阅信息
但我面临的问题是,当我更改标签时,我的api每次都会被调用。这是不正确的。
我已经使用了这两个
.share() and .cache()
方法并且还在ngOnInit函数中编写了我的代码,但是每当我更改选项卡时,我的api都会被调用。 任何人都可以帮我缓存视图或其ngOnInit方法。
答案 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调用,这对我有用。