【问题标题】:Angular 6 HttpClient Issue with mapping the response from API callAngular 6 HttpClient 问题与映射来自 API 调用的响应
【发布时间】:2019-04-17 14:44:19
【问题描述】:

我需要一些关于 Angular 6 HttpClient 的小帮助。我对来自 REST API 调用的响应有疑问。我正在使用 HttpClient。我有一个获取所有用户列表的函数(在我的例子中,我称之为潜在客户)。

fetchLeadsList(){
  return this.http.get('http://localhost:3000/api/leads')
                  .pipe(
                     map(data => {
                        console.log(data);
                        return data;          
                     }));
}

在我的组件的OnInit 中,我将此端点称为:

this.leadsService.fetchLeadsList()
                 .subscribe(response => {
                    console.log(response, 'leadsList');
                    this.leadsList = response.data; // leadList is declared as an empty array 
                 });

我得到的线索列表如下:

但是,当我尝试映射上述组件中提到的服务响应时(this.leadsList = response.data),我收到如下错误:

错误 TS2339:“对象”类型上不存在属性“数据”。

既然有如图所示的data属性,怎么会报错呢?

而且我还可以在视图中显示列表!有什么我遗漏的吗?

【问题讨论】:

    标签: angular typescript angular6 angular-httpclient


    【解决方案1】:

    你需要告诉编译器response 有什么类型。您可以为它创建一个类型或将其设置为 any 以让编译器传递您的代码

    this.leadsService.fetchLeadsList()
        .subscribe((response: any) => {
          console.log(response, 'leadsList');
          this.leadsList = response.data; // leadList is declared as an empty array
    })
    

    【讨论】:

    • 感谢@Suren Srapyan 的快速回答。我很感激
    【解决方案2】:

    HttpClient.get() 方法将 JSON 服务器响应解析为匿名 Object 类型。它不知道那个物体的形状是什么。

    您可以指定要将结果投射到哪个模型:

    fetchLeadsList() {
        return this.http.get<{ data: any[] }>('http://localhost:3000/api/leads')
                             ^^^^^^^^^^^^^
    

    另见:

    【讨论】:

    • 感谢@yurzui 的回答!我很感激。
    【解决方案3】:

    尝试访问 response['data'] 希望这能解决您的问题

    快乐编码:)

    【讨论】:

    • 实际上,@Suren Srapyan 的回答帮助解决了我的问题。不过感谢您的评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2019-06-04
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多