如何使用 *ngFor 获取复杂的对象数组(其值是获取对象数组)
How to fetch complex array of object (whose value is gain an array of object) using *ngFor
我成功地循环抛出值为对象数组的对象。下面是对象:
this.testObj2 = {
nodeFour: [
{ elementOne: "B Street" },
{ elementTwo: "city" },
{ elementThree: "Area-591323" },
{ elementFour: "something" }
]
}
我可以在 table 中填充数据,如下所示:
下面是我的模板代码:
<table class="table">
<thead>
<tr>
<ng-container *ngFor="let obj of testObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<th *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.key }}</th>
</ng-container>
</ng-container>
</tr>
</thead>
<tbody>
<tr>
<ng-container *ngFor="let obj of testObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<td *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.value }}</td>
</ng-container>
</ng-container>
</tr>
<tr>
</tbody>
</table>
这是我的问题:
我的用例表明我应该能够填充多个 table。我坚持这个。我假设 *ngFor 应该是这个的理想选择。下面是我必须填充的示例数据结构(基本上是上面数据结构的数组):
this.testObj3 = [
{
nodeFour: [
{ elementOne: "B Street" },
{ elementTwo: "city" },
{ elementThree: "Area-591323" },
{ elementFour: "something" }
]
},
{
nodeFive: [
{ elementOnee: "Bla Street" },
{ elementTwoo: "Hondacity" },
{ elementThreee: "someArea-591323" },
{ elementFourr: "somethingIsAlwaysHappening" }
]
}
];
我需要在两个不同的 table 中填充它,一个用于“nodeFour”,另一个用于“nodeFive”
下面是我试过的模板片段:
<div>
<ng-container *ngFor="let TObj2 of testObj3; trackBy: trackByFn;" >
<table class="table">
<thead>
<tr>
<ng-container *ngFor="let obj of TObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<th *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.key }}</th>
</ng-container>
</ng-container>
</tr>
</thead>
<tbody>
<tr>
<ng-container *ngFor="let obj of TObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<td *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.value }}</td>
</ng-container>
</ng-container>
</tr>
<tr>
</tbody>
</table>
</ng-container>
</div>
我在下面一行遇到错误:
<ng-container *ngFor="let ts1 of obj.value">
错误如下:
有人可以帮我解决这个问题吗?
在我的实际需求中,上述数据结构的数据将在运行时从API中获取。所以要显示的 table 的数量将在运行时决定。
提前致谢!
打字稿的问题,Angular不知道“object.value”是什么对象,说你不能迭代(*)。
你可以帮助 typeScript 声明接口
export interface TableDef{
[key: string]:any[]
}
并将您的变量声明为
testObj3:TableDef[];
(*) 如果在声明对象时将值赋给对象,TypeScript 不会显示错误
我成功地循环抛出值为对象数组的对象。下面是对象:
this.testObj2 = {
nodeFour: [
{ elementOne: "B Street" },
{ elementTwo: "city" },
{ elementThree: "Area-591323" },
{ elementFour: "something" }
]
}
我可以在 table 中填充数据,如下所示:
下面是我的模板代码:
<table class="table">
<thead>
<tr>
<ng-container *ngFor="let obj of testObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<th *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.key }}</th>
</ng-container>
</ng-container>
</tr>
</thead>
<tbody>
<tr>
<ng-container *ngFor="let obj of testObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<td *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.value }}</td>
</ng-container>
</ng-container>
</tr>
<tr>
</tbody>
</table>
这是我的问题: 我的用例表明我应该能够填充多个 table。我坚持这个。我假设 *ngFor 应该是这个的理想选择。下面是我必须填充的示例数据结构(基本上是上面数据结构的数组):
this.testObj3 = [
{
nodeFour: [
{ elementOne: "B Street" },
{ elementTwo: "city" },
{ elementThree: "Area-591323" },
{ elementFour: "something" }
]
},
{
nodeFive: [
{ elementOnee: "Bla Street" },
{ elementTwoo: "Hondacity" },
{ elementThreee: "someArea-591323" },
{ elementFourr: "somethingIsAlwaysHappening" }
]
}
];
我需要在两个不同的 table 中填充它,一个用于“nodeFour”,另一个用于“nodeFive” 下面是我试过的模板片段:
<div>
<ng-container *ngFor="let TObj2 of testObj3; trackBy: trackByFn;" >
<table class="table">
<thead>
<tr>
<ng-container *ngFor="let obj of TObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<th *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.key }}</th>
</ng-container>
</ng-container>
</tr>
</thead>
<tbody>
<tr>
<ng-container *ngFor="let obj of TObj2 | keyvalue">
<ng-container *ngFor="let ts1 of obj.value">
<td *ngFor="let o of ts1 | keyvalue" scope="col">{{ o.value }}</td>
</ng-container>
</ng-container>
</tr>
<tr>
</tbody>
</table>
</ng-container>
</div>
我在下面一行遇到错误:
<ng-container *ngFor="let ts1 of obj.value">
错误如下:
有人可以帮我解决这个问题吗? 在我的实际需求中,上述数据结构的数据将在运行时从API中获取。所以要显示的 table 的数量将在运行时决定。
提前致谢!
打字稿的问题,Angular不知道“object.value”是什么对象,说你不能迭代(*)。
你可以帮助 typeScript 声明接口
export interface TableDef{
[key: string]:any[]
}
并将您的变量声明为
testObj3:TableDef[];
(*) 如果在声明对象时将值赋给对象,TypeScript 不会显示错误