Angular 6返回映射丢失

时间:2018-11-07 18:29:55

标签: angular angular-httpclient

将项目从Angular 4升级到6,并且在恢复工作上遇到了一些麻烦。我的json像

{
    "incomingViolationList":[{"productName": "Mirror",…],
    "incomingViolationListCount": 67
}

我的服务呼叫过去看起来像这样,但在A6中,.map不再起作用。

return this.http.get('MappViolations/MappViolations?', options)
      .map(response => <GridDataResult>{
        data: response.json().incomingViolationList,
        total: response.json().incomingViolationListCount
      });

我已经开始了新的服务电话,但是如何区分“数据”和“总计”却茫然无措

return this.http.get<IncommingViolations[]>
      (AppSettings.API_ENDPOINT + 'MappViolations/MappViolations?', { params });

3 个答案:

答案 0 :(得分:2)

在Angular 6中,使用HttpClient代替Http服务

  

默认情况下,使用HttpClient响应对象是JSON,因此不再需要解析它(不需要response.json()

此外,如果您使用Angular 6更新来更新RxJS 6,它的外观类似于pipe个可用的运算符。

return this.http.get('MappViolations/MappViolations?', options)
  .pipe( 
     map((response: any) => ({
      data: response.incomingViolationList,
      total: response..incomingViolationListCount
     })
  );

答案 1 :(得分:2)

在Angular 6中,您将使用HttpClient,它默认返回json响应。因此,您可以从响应中删除json。

return this.http.get('MappViolations/MappViolations?', options)
     .pipe( 
 map(response => ({
  data: response.incomingViolationList, //<-- remove json
  total: response..incomingViolationListCount //<-- remove json
 })

);

答案 2 :(得分:-1)

因此您在评论中指出,您的情况是 map不是一个选择。嗯,实际上它仍然是,但是使用方式略有不同

return this.http.get('MappViolations/MappViolations?', options)
      .pipe(
        map(response => <GridDataResult>{
          data: response.json().incomingViolationList,
          total: response.json().incomingViolationListCount
      }));

在可观察到的pipe的指示下直接使用map