Je voudrais savoir s'il est possible de créer une table HTML dynamique à partir de données JSON. Le nombre de colonnes et d'en-têtes doit changer en fonction des clés du JSON. Par exemple, ce JSON devrait créer cette table:
{
color: "green", code: "#JSH810"
}
,
{
color: "red", code: "#HF59LD"
}
...
Et ce JSON devrait créer cette table:
{
id: "1", type: "bus", make: "VW", color: "white"
}
,
{
id: "2", type: "taxi", make: "BMW", color: "blue"
}
...
Cependant, cela doit être 100% dynamique, car je veux afficher des centaines d'objets JSON différents, donc rien ne devrait être codé en dur dans la page HTML.
Si vous souhaitez obtenir la clé de votre objet en tant que tête de votre table, vous devez créer un pipe personnalisé .
import { PipeTransform, Pipe } from '@angular/core';
@Pipe({name: 'keys'})
export class KeysPipe implements PipeTransform {
transform(value, args:string[]) : any {
let keys = [];
for (let key in value) {
keys.Push(key);
}
return keys;
}
}
Mise à jour: Ou renvoyez simplement les clés en utilisant Object.keys () . ( démo )
@Pipe({name: 'keys'})
export class KeysPipe implements PipeTransform {
transform(value, args:string[]) : any {
return Object.keys(value);
}
}
Maintenant dans votre modèle html:
<table>
<thead>
<tr>
<th *ngFor="let head of items[0] | keys">{{head}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of items">
<td *ngFor="let list of item | keys">{{item[list]}}</td>
</tr>
</tbody>
</table>
Mise à jour : Voici la démo .
Cela peut aider:
export class AppComponent {
//Array of any value
jsonData:any = [
{id: "1", type: "bus", make: "VW", color: "white"},
{id: "2", type: "taxi", make: "BMW", color: "blue"}
];
_object = Object;
}
<div>
<table border="1">
<thead>
<tr>
<th *ngFor="let header of _object.keys(jsonData[0]); let i = index">{{header}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let row of jsonData; let i = index">
<th *ngFor="let objKey of _object.keys(row); let j = index">{{ row[objKey] }} </th>
</tr>
</tbody>
</table>
</div>