Angular:尝试比较“[object Object]”时出错。仅允许使用数组和可迭代对象
2021-12-13
11268
我尝试迭代通过服务调用收到的对象,然后使用 *ngFor 将此迭代放入表中。
但是,尝试执行此操作时,我收到以下错误。
Error trying to diff '[object Object]'. Only arrays and iterables are allowed
我理解您无法迭代对象,但是当我尝试寻找解决方案时,它对我来说并不太合理。请参阅下面的代码,任何帮助都将不胜感激:
.ts
searchValue: string = "3";
logList: any = [];
getLogs() {
const numOfLogs = new FormData();
numOfLogs.append('n_log', this.searchValue)
this.fileUploadService.getLogs(numOfLogs).subscribe(
data => {this.logList = data},
);
}
html
<table class="table table-striped" style="width:1000px;table-layout:fixed;font-size:10px;color:black;">
<thead>
<tr>
<th>Name</th>
<th>Date</th>
<th>FilePath</th>
<th>Updated</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of logList">
<td>{{ item.Name}}</td>
<td>{{ item.Date}}</td>
<td>{{ item.FilePath}}</td>
<td>{{ item.Updated}}</td>
</tr>
</tbody>
</table>
console.log(this.logList)
{
"Name": [
"name1",
"name2",
"name3"
],
"Date": [
"2021-12-13",
"2021-12-12",
"2021-12-11"
],
"FilePath": [
"FileName1.xlsx",
"FileName2.xlsx",
"FileName3.xlsx",
],
"Updated": [
"2021-12-31T00:00:00",
"2021-12-31T00:00:00",
"2021-12-31T00:00:00",
],
}
3个回答
使用 keyValue 管道,因为 loglist 不是数组,下面的代码将解决您的问题
<tbody>
<tr>
<td *ngFor="let item of logList | keyvalue"">{{ item.value}}</td>
</tr>
</tbody>
abhishek sahu
2021-12-13
*ngFor
不允许您迭代对象。它应该迭代什么,对象的键还是值?
我猜如果您运行:
this.fileUploadService.getLogs(numOfLogs).subscribe(
data => { console.log(typeof data); this.logList = data;},
);
它将记录“对象”。
如果您想在模板中迭代一个对象,您可以将其转换为 .ts 文件中的数组/可迭代对象并使用它:
let iterableLogList = Object.keys(this.logList);
或者您可以将
this.logList
管道插入 Angular 的内置
keyvalue
管道。
*ngFor="let item of logList | keyvalue"
您不需要导入任何新内容即可使用它。现在,每个项目的键将在模板中以
item.key
的形式提供,同样,其值也将以
item.value
的形式提供。
Nicholas Hayashi
2021-12-13
这些解决方案对我都不起作用。我认为错误出现(就我而言)是因为数组为空(我正在检查在 http 服务调用返回后将被分配的值)。我所需要做的就是使用条件子句:
<tbody *ngIf="logList">
<tr *ngFor="let item of logList">
...
Cedric Ipkiss
2023-06-30