首页 > 解决方案 > 获取 Observable 的对象并使用 Angular 转换为 Array

问题描述

早上好。

我得到以下对象,需要处理结果(数组)中的数据,但我的方法无法正常工作。

Object
currentPage: 1
firstRowOnPage: 1
lastRowOnPage: 6
pageCount: 1
pageSize: 10
results: Array(6)
0: {id: 1256, name: "Erik", address: "Centro", addressComplement: "Centro", cep: "11212-122", …}
1: {id: 1014, name: "Everson Luiz", address: null, addressComplement: null, cep: null, …}
2: {id: 1011, name: "Everson Luiz Silva", address: null, addressComplement: null, cep: null, …}
3: {id: 1284, name: "Fulado de Tal", address: null, addressComplement: null, cep: null, …}
4: {id: 1012, name: "Jackson Alexandre", address: null, addressComplement: null, cep: null, …}
5: {id: 1013, name: "Robson Henrique Silva", address: "", addressComplement: "", cep: "", …}
length: 6
__proto__: Array(0)
rowCount: 6
__proto__: Object

当我尝试访问数据时,我收到一条错误消息,指出我的对象不是数组,因此它没有像 MAP 和 PUSH POP FILTER 这样的数组的典型方法。

这是我的对象,这是我的方法。

  private dataStore = {
    treasurers: []
  };

  private loadAllTreasurers(): void {
    const unit = auth.getCurrentUnit();
    this.treasureService.getTreasurers(unit.id).subscribe((data: Treasurer[]) => {
      console.log(data)
      this.dataStore.treasurers = data;
    });
 }


<!--Service-->

 getTreasurers(unitId): Observable<Treasurer[]> {
    const url = '/treasury/treasurers/unit/' + unitId;
    return this.http
      .get<Treasurer[]>(url);
  }

我从 AspnetCore 2.2 服务器获取对象

标签: node.jsangulartypescriptobservable

解决方案


你的问题是你Array不是data对象。它在data.resultsdata看起来像一个带有页面响应信息的对象。你想要data.results而不是data对象。

你应该只需要更新这个:

this.treasureService.getTreasurers(unit.id).subscribe((data: object) => {
  console.log(data)
  this.dataStore.treasurers = data.results; // <-- .results
});

我不确定您的data对象是否有类型,所以我将其设置object为占位符


推荐阅读