如何遍历对象数据的对象以填充 angular table
How can I iterate through object of objects data to fill angular table
我很难尝试迭代从 api 到 angular bootstrap table 获取的数据。从第一种方法开始,我将数据映射到 prsnl 变量声明为 prsnl: any
并在下面的函数中初始化:
getAllPersnlValues(data) {
return this.persnlService.getPersnl(data)
.pipe(
map((response) => response)
).subscribe((res) => {this.prsnl = res; console.log('prsnl', this.prsnl)});
}
在Html这边我有:
<table class="table table-striped">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">FULL NAME</th>
</tr>
</thead>
<tbody>
<tr *ngFor = "let pr of prsnl">
<th scope="row">1</th>
<td>{{pr.result.fullName}}</td>
</tr>
</tbody>
</table>
因为 api 的响应是对象的对象,如下面的屏幕截图所示:
正如您在控制台上看到的那样,api 响应已从 getAllPersnlValues() 方法正确分配给 prsnl 变量,但在 table 中迭代失败,因为 table仍然是空的。
然后我明白我需要将作为对象对象的 prsnl 类型转换为对象数组,以便 *ngFor 可以执行迭代,我现在使用 KeyValuePipe
中的 keyval 来转换api 对数组的响应,正如您在下面的代码中看到的那样:
getAllPersnlValues(data) {
console.log('data', data);
return this.persnlService.getPersnl(data)
.pipe(
map((response) => {
if(typeof response !== 'undefined') this.keyval.transform(response)
})).subscribe((res) => {this.prsnl = res; console.log('prsnl', this.prsnl)})
}
但是这样做会导致项目无法编译,只有当我从 app.module.ts 中删除 KeyValuePipe 导入时它才会编译,我意识到 subscribe() 函数不 console.log this.prsnl 值。然后我怎样才能使响应成为对象的对象并在 table 中显示它呢?我将非常感谢您帮助解决这一障碍。提前致谢。
您正在尝试使用本机不支持的 *ngFor
指令迭代对象。你需要使用 keyvalue
管道来做到这一点。
但是看到你的日志,所需的数组包含在 result
属性 中。所以尝试以下
<tr *ngFor = "let res of prsnl?.result">
<th scope="row">1</th>
<td>{{ res?.fullName }}</td>
</tr>
我很难尝试迭代从 api 到 angular bootstrap table 获取的数据。从第一种方法开始,我将数据映射到 prsnl 变量声明为 prsnl: any
并在下面的函数中初始化:
getAllPersnlValues(data) {
return this.persnlService.getPersnl(data)
.pipe(
map((response) => response)
).subscribe((res) => {this.prsnl = res; console.log('prsnl', this.prsnl)});
}
在Html这边我有:
<table class="table table-striped">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">FULL NAME</th>
</tr>
</thead>
<tbody>
<tr *ngFor = "let pr of prsnl">
<th scope="row">1</th>
<td>{{pr.result.fullName}}</td>
</tr>
</tbody>
</table>
因为 api 的响应是对象的对象,如下面的屏幕截图所示:
正如您在控制台上看到的那样,api 响应已从 getAllPersnlValues() 方法正确分配给 prsnl 变量,但在 table 中迭代失败,因为 table仍然是空的。
然后我明白我需要将作为对象对象的 prsnl 类型转换为对象数组,以便 *ngFor 可以执行迭代,我现在使用 KeyValuePipe
中的 keyval 来转换api 对数组的响应,正如您在下面的代码中看到的那样:
getAllPersnlValues(data) {
console.log('data', data);
return this.persnlService.getPersnl(data)
.pipe(
map((response) => {
if(typeof response !== 'undefined') this.keyval.transform(response)
})).subscribe((res) => {this.prsnl = res; console.log('prsnl', this.prsnl)})
}
但是这样做会导致项目无法编译,只有当我从 app.module.ts 中删除 KeyValuePipe 导入时它才会编译,我意识到 subscribe() 函数不 console.log this.prsnl 值。然后我怎样才能使响应成为对象的对象并在 table 中显示它呢?我将非常感谢您帮助解决这一障碍。提前致谢。
您正在尝试使用本机不支持的 *ngFor
指令迭代对象。你需要使用 keyvalue
管道来做到这一点。
但是看到你的日志,所需的数组包含在 result
属性 中。所以尝试以下
<tr *ngFor = "let res of prsnl?.result">
<th scope="row">1</th>
<td>{{ res?.fullName }}</td>
</tr>