Angular 6:通过httpClient从对应的JSON获取objects的数组

Angular 6: get array of objects from corresponding JSON through httpClient

我正在尝试使用来自后端 API 的数据填充 table。 table 需要一个 rows 输入,它是 object 的数组,每个 object 代表 table 中的一行并由 column-name/value 组成对。后端发布一个 JSON object 数组,如下所示:

[{"column1":"val1","column2":"val2"},{"column1":"valA","column2":"valB"}]

如果我只是将该字符串复制并粘贴到我的 .ts 文件中并将其直接分配给行 属性,则一切正常:

this.rows = [{"column1":"val1","column2":"val2"},{"column1":"valA","column2":"valB"}]

无论 rows 属性 定义为 any 还是 Array<DataObject> 或介于两者之间的任何值,这都有效。那为什么我好像不能通过httpClient实现同样的功能呢?

这是我目前的情况:

data-service.service.ts:

@Injectable()
export class DataService {

    constructor (private http: HttpClient) {}

    public getData() {
        return this.http.get<Array<DataObject>>(apiURL, {responseType : 'json'});
    }

table-view.route.ts:

export class TableView implements OnInit {

    rows: Array<DataObject>;

    constructor(dataService: DataService) {
        dataService.getData()
                   .subscribe((result: Array<DataObject>) => this.rows = result)
    }
}

data-object.ts

export interface DataObject {
    column1: string;
    column2: string;
}

这似乎正确地获取了数据,但它输入错误或包含在额外的 object 或其他内容中,并且 table 无法读取它。没有错误;只是空 table。有趣的是,我在 table 声明之前将此添加到我的 html 只是为了确保我的数据通过:

<div>{{rows[0].column1}}</div>

这正确地输出了 "val1",并且突然用所有数据填充了 table。此访问是否以某种方式将 rows 的类型更改为 table 组件可以理解的类型?

我已经尝试了上述代码的各种变体,有无 type-checking;我尝试删除 json 内容 header,将其作为明文读取,然后使用 JSON.parse()。我意识到我可以遍历数组,实例化 DataObjects 并在将它们推送到 rows 之前单独映射字段,但是必须有更简单的方法来执行此操作,对吧...?任何朝着正确方向的推动将不胜感激。

我相信这是因为 this.rows = result 没有包含在 {} 中。您可以注销您的订阅以确保它真的回来了吗?

dataService.getData()
.subscribe(
  (result: Array<DataObject>) => { 
    console.log('success', result);
    this.rows = result
  },
  (error: any) => { 
    console.log('error', error);
  }
)

我还建议将该调用移至 NgOnInit 而不是构造函数。