http订阅未将数据映射到模型

时间:2019-02-25 11:49:53

标签: angular ionic-framework angular-httpclient

caveat:我是Angle的新手,所以我可能误会了它的工作原理。

我有一个端点要获取一些数据。我已经创建了一个模型,我想我可以将响应直接映射到一系列模型中。

,但是看起来它完全忽略了模型,但是我得到了我的数据,但这是整个JSON数据响应。不只是模型中的匹配字段。

这是我的服务代码

getFaults() {
   return this.http.get<Fault[]>('<SITE>/api/faults')
}

这是我的模特

export interface Fault {
description: string
  }

这是我在page.ts中调用的代码

export class Tab1Page {
  constructor(public faultsService: FaultsService) {}

  faults: Fault[];

  getFaults() {
    console.log("click");
    this.faultsService
      .getFaults()
      .subscribe((data: Fault[]) => console.log(data));
  }
}

到控制台的输出看起来像这样,我希望它是故障模型的数组,只映射了描述。我想念什么吗?

[1]

3 个答案:

答案 0 :(得分:2)

调用API时,您将获取所有数据。您需要做的只是使用所需的数据(在本例中为描述)。 RxJS提供了map运算符,您可以使用该运算符以所需的格式转换数据:

以下是使用RxJS映射运算符转换数据的方法:

  getFaults() {
        console.log("click");
        this.faultsService
          .getFaults().map((data: any) => data.description)
          .subscribe((data: Fault[]) => console.log(data));
      }

答案 1 :(得分:1)

当你说

.subscribe((data: Fault[]) => console.log(data));

您是说dataFault[]类型,只有在编译时才会检查,因此如果尝试在{内进行data.status例如{1}}。 在运行时,将按原样打印数据。

如果只想记录Fault.description,则必须遍历数组。

subscribe()

答案 2 :(得分:0)

代码或行为没有错。它完成了预期的工作。该模型只是打字稿interface。它所做的只是类型检查:

getFaults() {
  return this.http.get<Fault[]>('<SITE>/api/faults')
}

要从数组description的项中获取特定属性data,您需要对其进行循环并获取以下属性:

getFaults() {
  console.log("click");
  this.faultsService
    .getFaults()
    .subscribe((data: Fault[]) => {
      const descriptions = data.map(obj => {
        return { description: obj.description }
      });
      console.log(descriptions);
    });
}