Angular'找不到'object'类型的不同支持对象'[object Object]'。 NgFor 仅支持绑定到 Iterables,例如 Arrays。
Posted
技术标签:
【中文标题】Angular\'找不到\'object\'类型的不同支持对象\'[object Object]\'。 NgFor 仅支持绑定到 Iterables,例如 Arrays。【英文标题】:Angular 'Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.'Angular'找不到'object'类型的不同支持对象'[object Object]'。 NgFor 仅支持绑定到 Iterables,例如 Arrays。 【发布时间】:2020-10-17 10:29:08 【问题描述】:我正在创建一个 Angular 应用程序,该应用程序显示来自 postgresql 数据库的项目列表和用户列表,但在 html 中显示用户列表时遇到问题。 问题是无论我做什么,Angular 都将我的数组视为一个对象。 相同的代码适用于项目,但不适用于用户。
这是我的服务:
import environment from "../../../environments/environment";
import Observable from 'rxjs';
import Projet from '../modele/projet.model';
import Test from '../modele/test.model';
import HttpParams,HttpClient from "@angular/common/http";
import Injectable from "@angular/core";
import map from 'rxjs/operators';
import User from '../modele/user.model';
import Financement from '../modele/financement.model';
@Injectable()
export class WebService
constructor(private httpClient: HttpClient)
serverUrl: string = "http://localhost:8080/"
get(url: string): Observable<any>
return this.httpClient.get(this.serverUrl + url);
组件:
import Component, OnInit from '@angular/core';
import User from '../../shared/modele/user.model';
import Router from '@angular/router';
import WebService from '../../shared/sevices/web.service';
import FormGroup, FormBuilder, FormControl, Validators, Form from '@angular/forms';
@Component(
selector: 'app-show-users',
templateUrl: './show-users.component.html',
styleUrls: ['./show-users.component.scss']
)
export class ShowUsersComponent implements OnInit
ngOnInit(): void
this.getData();
usersList: Array<User>
user: User
myForm: FormGroup;
constructor(private webService: WebService, private formBuilder: FormBuilder,private router: Router)
getData(): void
this.webService.get("showUsers").subscribe(res =>
let response = JSON.parse(JSON.stringify(res))
this.usersList = response.data
)
html:
<tr *ngFor="let user of usersList">
<td>user.name</td>
<td>user.username</td>
<td>user.email</td>
</tr>
这是服务器响应: server response
注意:完全相同的代码适用于对象 PROJECT
【问题讨论】:
能否请您发布您从其余电话中得到的回复?似乎只有那个有问题。 你为什么要 JSON.stringify 然后 JSON.parse 在同一行的同一个对象上 不要忘记接受和支持对您有帮助的答案>_> 【参考方案1】:您需要确保传递给*ngFor
的变量是一个数组。您可以使用Array.from(v)
确保这一点,也可以使用Object.values(v)
剥离可能从服务器端发送的对象的任何键:
this.webService.get("showUsers").subscribe(res =>
this.usersList = Array.from(Object.values(res.data.body.data));
)
【讨论】:
变量 this.usersList 已经声明为数组 不管你声明它是什么类型,你仍然需要清理你收到的实际数据。 TypeScript 类型只是编译时检查。 Angular 说它不能对对象执行ngFor
的原因只有一个:因为它是对象而不是数组:p
我自己也遇到过几次这个错误,即使数据看起来像是一个数组。试一试;)
它给了我这个错误 ERROR TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator)) at Function.from ()
哦,嗯,你可能没有先设置this.usersList
的值,我的回答可能有点混乱,我会更新【参考方案2】:
您不需要此代码:
let response = JSON.parse(JSON.stringify(res))
this.usersList = response.data
简单地使用:
this.userlist = res
你完整的方法:
this.webService.get("showUsers").subscribe(res =>
this.userlist = res
);
【讨论】:
还是同样的问题,Angular 仍在考虑我的数组作为对象【参考方案3】:就我而言,我有一个简单的方法,但我花了很多时间。你可以试试这个:
datas: any;
this.token = JSON.parse(window.localStorage.getItem('token'));
this.authService.getData(this.token.id).subscribe(data =>
this.datas = data;
)
在 HTML 模板中,只需使用 this.datas.id, this.datas.username
而不是 *ngFor
【讨论】:
以上是关于Angular'找不到'object'类型的不同支持对象'[object Object]'。 NgFor 仅支持绑定到 Iterables,例如 Arrays。的主要内容,如果未能解决你的问题,请参考以下文章
Angular:'找不到'object'类型的不同支持对象'[object Object]'。 NgFor 仅支持绑定到 Iterables,例如 Arrays'
Angular 4 找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如 Arrays
rxjs 将 5 升级到 6。找不到“对象”类型的不同支持对象“”
找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如 Arrays.(AngularFireList)
找不到“object”类型的不同支持对象“[object Object]”。 --> 要在表格中显示的 VirusTotal JSON
找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如带有异步管道的数组