请注意,关于同一错误的其他问题也无济于事,因为我使用不同的方式来获取数据。
我想从API中获取一些数据,并使用Angular
在页面中显示它们。
http请求将获得一系列项目。
所以这是projects.component.ts
:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
interface Project {
alias:Array<string>;
apps:Array<string>;
description: string;
id:string;
name:string;
}
@Component({
selector: 'app-projects',
templateUrl: './projects.component.html',
styleUrls: ['./projects.component.css']
})
export class ProjectsComponent {
title:string = "Projects";
dataProjects: Array<Project>;
constructor(private httpClient:HttpClient){ }
getProjects() {
this.httpClient.get<Array<Project>>("http://company.com/v1/api/projects")
.subscribe( data => { this.dataProjects = data; } )
}
}
这是projects.component.html中的视图:
<tbody>
<tr *ngFor="let proj of dataProjects">
<td> {{ proj.name }} </td>
<td>{{ proj.description }} </td>
</tr>
</tbody>
这是我得到的错误:
Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
如何返回项目数组?
编辑:
API输出示例:
{
"results": [
{
"alias": [
"project"
],
"apps": [],
"description": "Applications natives",
"id": "project",
"name": "project"
}
]
}
答案 0 :(得分:2)
我认为您的方法getProjects
从未被调用。这意味着dataProjects
是null
尝试
<tr *ngFor="let proj of dataProjects?.results">
<td> {{ proj.name }} </td>
<td>{{ proj.description }} </td>
</tr>
答案 1 :(得分:1)
我认为您收到此问题的原因是因为当angular尝试迭代该变量时尚未分配该变量,因此它还没有javascript类型。相反,您应该保存可观察对象,并在html-template中使用异步管道。
在打字稿中:
"«LIB${1|(,(a,(b,(c|})»",
在html中:
dataProjects$: Observable<Array<Project>>
getProjects() {
this.dataProjects$ = this.httpClient.get<Array<Project>>("http://company.com/v1/api/projects")
}
答案 2 :(得分:0)
这对我有用:
<tr *ngFor="let proj of dataProjects.results ">
<td> {{ proj.name }} </td>
<td>{{ proj.description }} </td>
</tr>
答案 3 :(得分:0)
请勿使用 *ngFor="let proj of dataProjects?.results"
原因::您已经将dataProjects
的类型定义为Array<Project>
因此,this.dataProjects = data;
违反了类型,而不是使用this.dataProjects = data. results;
您需要做的就是
getProjects() {
this.httpClient.get<Array<Project>>("http://company.com/v1/api/projects")
.subscribe( data => { this.dataProjects = data.results; } ) // <--- Change here
}
无需在template
端进行任何更改。