首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >angular 7 rxjs嵌套接口如何只取嵌套数组?

angular 7 rxjs嵌套接口如何只取嵌套数组?
EN

Stack Overflow用户
提问于 2019-03-20 00:46:48
回答 2查看 690关注 0票数 0

我有一个内部嵌套数组的接口:

代码语言:javascript
复制
import { IEmitente } from './ICustomer';

export interface IAccounts {
        current_page: number;
        data: ICustomer[];
        first_page_url: string;
        from: number;
        last_page: number;
        last_page_url: string;
        next_page_url: string;
        path: string;
        per_page: number;
        prev_page_url: string;
        to: number;
        total: number;
}

客户界面如下所示:

代码语言:javascript
复制
export interface ICustomer {
id: number;
name: string;
federalId: string;
firstBuy: date;
balance: number;
}

我在服务上有这个http get方法:

代码语言:javascript
复制
getContas(identific,search,page?): Observable<IAccounts[]> {
    return this.httpClient.get<IAccounts[]>(`${this.BASE_URL}/getContas?identific=${identific}&search=${search}&page=${page}`)
  }

观察值是这样的:

代码语言:javascript
复制
{current_page: 1, data: Array(15), first_page_url: "https://web.gruposol.com.br/endpoint/api/getContas?page=1", from: 1, last_page: 19, …}
current_page: 1
data: (15) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
first_page_url: "https://address/api/getContas?page=1"
from: 1
last_page: 19
last_page_url: "https://address/api/getContas?page=19"
next_page_url: "https://address/api/getContas?page=2"
path: "https://address/api/getContas"
per_page: 15
prev_page_url: null
to: 15
total: 275
__proto__: Object

如何使用rxjs从observable中仅获取数据(客户)部分?我需要这样的东西:在变量customers:ICustomer[] = [];上,我只想接收来自observable的数据数组。我该怎么做呢?目前我的ngOnInit方法是这样的:

代码语言:javascript
复制
  ngOnInit() {
     this.AlvosService.getContas(this.identific, this.search)
       .subscribe((response) => { console.log(response)} ),
        (error) => { console.log(error); };

  }
EN

回答 2

Stack Overflow用户

发布于 2019-03-20 02:12:59

试试这个:

代码语言:javascript
复制
this.AlvosService.getContas(this.identific, this.search)
          .pipe(
            mergeMap(accounts => accounts),
            map((account: IAccounts) => account.data),
            toArray()
          )
          .subscribe((customers) => { console.log(customers)} ),
           (error) => { console.log(error); };

由于您的http调用将返回一个IAccounts数组,因此您需要对该数组执行flatten操作,对数据执行map操作,然后再次将其zip到一个数组中。

票数 0
EN

Stack Overflow用户

发布于 2019-03-20 11:08:00

我找出了错误所在。如果你查看上面的响应,你会发现响应对象不是一个数组。问题出在服务上get方法的括号上。应该仅为<IAccounts>,而不是<IAccounts[]>。因此,像这样更改了方法:

代码语言:javascript
复制
getContas(identific,search,page?): Observable<IAccounts> {
    return this.httpClient.get<IAccounts>(`${this.BASE_URL}/getContas?identific=${identific}&search=${search}&page=${page}`)
  }

它起作用了!非常感谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55246115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档