这个逻辑是否属于我的服务或组件? Angular 2+

时间:2017-11-09 05:49:10

标签: observable angular-services

我从api获取了大量客户数据,我想将其缓存在我的服务中,因此不同的组件可以访问从数据返回不同查询的函数,而不会产生多个http请求,因为数据只是每月更新。这样的事情。

data;

getData() {
  if (this.data)
    return Observable.of(this.data);

  return this.http.get(***********)
    .map(response => {
      this.accounts = response;
      return this.accounts;
    });

然后我在服务中有函数组件可以调用以获取特定数据,以正确的形状显示在表格等

getDataForSomethingById(id) {
  return this.getData()
    .map(result => {
      //get the data into the right shape
  );

在组件中......

this.dataService.getDataForSomethingById(1)
  .subscribe(result => this.tableData = result);

问题是组件可能在初始化时调用许多这些函数,导致多个http调用(仅在收到响应之前所有订阅的第一次)。 我的问题是,我是以正确的方式来做这件事的吗?服务是否是此逻辑的正确位置,或者该逻辑应该在我的组件中,例如

this.dataService.getData()
  .subscribe(result => {
    this.tableData = this.processTable(result);
    this.someListData = this.getListData(result);

或者我可以在服务中以某种方式做这样的事情

//Initialize this as an observable the the functions can wait until it loads?
data;

// call this on login to get the data
getData() {
  if (this.data)
    return Observable.of(this.data);

  return this.http.get(***********)
    .map(response => {
      this.accounts = response;
      return this.accounts;
    });

getDataForSomethingById(id) {
 //wait for the data to load
 //process the data
 //return it to the component
}

只是在我写作时考虑这个问题,我倾向于显示数据的组件应该负责将其设置为正确的形状,而服务应该只是获取/缓存原始数据?

1 个答案:

答案 0 :(得分:0)

例如,你需要使用你的服务来查询api,然后缓存数据,我在服务中也要做的就是以我的应用程序的标准格式映射数据,如果组件需要这些数据,它可以以该格式请求它,然后它可以以自定义格式映射它。