我有一个内部嵌套数组的接口:
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;
}
客户界面如下所示:
export interface ICustomer {
id: number;
name: string;
federalId: string;
firstBuy: date;
balance: number;
}
我在服务上有这个http get方法:
getContas(identific,search,page?): Observable<IAccounts[]> {
return this.httpClient.get<IAccounts[]>(`${this.BASE_URL}/getContas?identific=${identific}&search=${search}&page=${page}`)
}
观察值是这样的:
{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方法是这样的:
ngOnInit() {
this.AlvosService.getContas(this.identific, this.search)
.subscribe((response) => { console.log(response)} ),
(error) => { console.log(error); };
}
发布于 2019-03-20 02:12:59
试试这个:
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
到一个数组中。
发布于 2019-03-20 11:08:00
我找出了错误所在。如果你查看上面的响应,你会发现响应对象不是一个数组。问题出在服务上get方法的括号上。应该仅为<IAccounts>
,而不是<IAccounts[]>
。因此,像这样更改了方法:
getContas(identific,search,page?): Observable<IAccounts> {
return this.httpClient.get<IAccounts>(`${this.BASE_URL}/getContas?identific=${identific}&search=${search}&page=${page}`)
}
它起作用了!非常感谢你的帮助。
https://stackoverflow.com/questions/55246115
复制相似问题