将动态列和数据绑定到angular 7中的mat表
Am通过动态准备列将数据绑定到角度材质表将动态列和数据绑定到angular 7中的mat表,angular,angular-material,Angular,Angular Material,Am通过动态准备列将数据绑定到角度材质表 please find below code component.ts export class DepComponent { tableSource :any= [ { "name":"ssit", "departments":[{"depName":"cse","noOfStudents":30},
please find below code
component.ts
export class DepComponent {
tableSource :any= [
{
"name":"ssit",
"departments":[{"depName":"cse","noOfStudents":30},
{"depName":"civil","noOfStudents":60}]
},
{
"name":"vbit",
"departments":[{"depName":"cse","noOfStudents":90},
{"depName":"civil","noOfStudents":40}]
}
];
displayedColumns: string[] = [];
constructor() {
this.displayedColumns= this.tableSource[0].departments.map(x=>x.depName)
}
}
<table mat-table [dataSource]="tableSource" class="mat-elevation-z8">
<ng-container matColumnDef="{{column}}" *ngFor="let column of displayedColumns">
<th mat-header-cell *matHeaderCellDef>
{{column}}
</th>
<td mat-cell *matCellDef="let element">
<span *ngFor="let s of element.departments">
{{s.noOfStudents}}
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
我想输出如下
Cse Civil
30 60
90 40
要首先获得所需的结果,您需要将数据转换为所需的格式,如
dataSource=this.tableSource.map(i=> {
var result = {};
i.departments.forEach(d=>{
result[d['depName']]=d.noOfStudents
})
return result;
})
然后将html更改为
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
<ng-container matColumnDef="cse">
<th mat-header-cell *matHeaderCellDef> Cse </th>
<td mat-cell *matCellDef="let element"> {{element.cse}} </td>
</ng-container>
<ng-container matColumnDef="civil">
<th mat-header-cell *matHeaderCellDef> Civil </th>
<td mat-cell *matCellDef="let element"> {{element.civil}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
Cse
{{element.cse}
公民的
{{element.civil}}
要首先获得所需的结果,您需要将数据转换为所需的格式,如
dataSource=this.tableSource.map(i=> {
var result = {};
i.departments.forEach(d=>{
result[d['depName']]=d.noOfStudents
})
return result;
})
然后将html更改为
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
<ng-container matColumnDef="cse">
<th mat-header-cell *matHeaderCellDef> Cse </th>
<td mat-cell *matCellDef="let element"> {{element.cse}} </td>
</ng-container>
<ng-container matColumnDef="civil">
<th mat-header-cell *matHeaderCellDef> Civil </th>
<td mat-cell *matCellDef="let element"> {{element.civil}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
Cse
{{element.cse}
公民的
{{element.civil}}
你能提供stackblitz吗?我可以在那里复制一个问题!您必须将行和列作为单独的阵列进行管理。您可以提供stackblitz,我可以在其中重现问题!您必须将行和列作为单独的数组来管理。当我从数据库中获取结果时,返回为{“30”:“30”,“60”:“60”}的值是retunning,而不是key@madhuGoud检查您的api响应是否与示例jsoncorrect@jitender相同我的api中的无效响应,有一件事是可以将object推到这里result[d['depName']={d.noOfStudents,d.nooftechers}@madhuGoud,我不这么认为,因为它需要字符串,并且您正在尝试将objectit用于我提供的示例JSON,当我从数据库结果中获取返回为{30:“30”,“60:“60”}值是重新展开的,而不是key@madhuGoud检查您的api响应,如果这与示例jsoncorrect@jitender来自我的api的无效响应相同,那么有一件事是可以将对象推送到这里结果[d['depName']={d.noOfStudents,d.nooftechers}@madhuGoud,我不这样认为,因为它需要是字符串,并且您正在尝试分配对象