角度2 - 可观察的回归

时间:2018-02-04 19:36:40

标签: json angular observable

我的服务中的Observable存在问题。 我需要为3名玩家获取数据。我的订阅将数据从服务签名到本地变量并将其推送到数组中。很好,但是当我从if语句返回数据时我有bug。我只能看到3名球员中的一名。如何在我的应用程序的整个生命周期内存储所有数据? 问候。

服务:

  getData(query): Observable<any> {
if(this.dataFromDb)
{
  return Observable.of(this.dataFromDb);
}

    return this.http.get(query)
      .map(res => res.json())
      .do(res => this.dataFromDb = res)
      .catch(err => Observable.throw(err.json() || 'Błąd');
  }
}

组件:

export class FriendsComponent implements OnInit {


  myDataFromDb: any[] = [];
  constructor(public dataService: DataService) {
}
private getDataFromDb(query) {
    this.dataService.getData(query).subscribe((data) =>
    {
     this.myDataFromDb.push(data);
     console.log(data);
    });
  }
  ngOnInit() {

for (let i of this.dataService.friends) {
    this.dataService.query = `${this.dataService.apiUrl}${i.nick}${this.dataService.apikey}`;

    this.getDataFromDb(this.dataService.query);

  }
    console.log(this.myDataFromDb);
    }
}

还有一些问题照片: 开始时的数据 Data on start

路线改变后的数据。 Data after route change

1 个答案:

答案 0 :(得分:2)

您必须使用对象“缓存”响应。我个人会选择发送给我的函数nick和apiKey,但是当你发送查询时,你可以做到

dataFromDb:any={};
getData(query): Observable<any> {
if(this.dataFromDb[query])
{
  return Observable.of(this.dataFromDb[query]);
}

    return this.http.get(query)
      .map(res => res.json())
      .do(res => this.dataFromDb[query] = res)
      .catch(err => Observable.throw(err.json() || 'Błąd');
  }
}