如何使用 *ngFor 处理 Angular 4 上的对象?

How to deal with Objects on Angular 4 using *ngFor?

我正在尝试使用来自数据库的一些数据来填充 select 选项 html。但是,Angular 4 给我以下错误:

ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

我在网上看到了一些关于这个问题的答案,甚至在Whosebug上也看到了一些答案,但是,我仍然无法解决。这是我的代码:

JSON 对象

{
"organizations": [
    {
        "id": 1,
        "organizationTypeId": 1,
        "name": "Hello",
        "abbreviation": "H"
    },
    {
        "id": 2,
        "organizationTypeId": 1,
        "name": "Test",
        "abbreviation": "T"
    }
  ]
}

型号

export interface Organization {
id: number;
organizationTypeId: number;
name: string;
abbreviation: string;

}

HTML

<select [ngModel]="organizations">
    <option *ngFor="let org of organizations" [ngValue]="org.id">
        {{org.name}}
    </option>
</select>

组件

export class UserAdditionalComponent implements OnInit  {

public organizations: Organization[];

ngOnInit(): void {

    this.net.get<Organization[]>(`Organization/GetAllUniversities/`).subscribe(t => {
        this.organizations = t;
            console.log(this.organizations);
            console.log(JSON.stringify(this.organizations, null, 4));
    }, err => {
        this.toasterService.pop('error', 'Erro', err.message);
        this.loaderService.display(false);
        });
    }
}

网络服务助手

get<T>(url: string): Observable<T> {
    let options = this.doHeaders();
    return this.doSub(this.http.get(this.doUrl(url), options));
}

private extractData(res: Response) {
    try {
        let body = res.json();
        return body || [];
    }
    catch (ex) {
        return {
            isOk:res.ok,
            status: res.status,
            message:res.statusText
        }
    }
}

我想保留通用的 Net Service Helper,因为它被用于应用程序的许多其他部分。我不确定如何处理 Object 和 *ngFor。任何帮助将不胜感激。

好吧,如果 this.organizations 正好等于以下内容(如您的问题):

{
"organizations": [
    {
        "id": 1,
        "organizationTypeId": 1,
        "name": "Hello",
        "abbreviation": "H"
    },
    {
        "id": 2,
        "organizationTypeId": 1,
        "name": "Test",
        "abbreviation": "T"
    }
  ]
}

那么这个错误是有道理的,因为有一个对象封装了你的 organizations 数组......所以你必须这样做:ngFor="let org of this.organizations.organizations".

或者将您的 this.net.get<Organization[]>('Organization/GetAllUniversities/') return 类型更改为数组...也许:

private extractData(res: Response) {
  try {
    let body = res.json();
    return body.organizations || [];
   }
  ...

最好的方法是改变

关于组件: this.organizations;this.data

在 HTML 上: *ngFor=let org of organizations*ngFor=let org of data.organizations