J'ai du mal à trouver un moyen de le faire. Dans un composant parent, le modèle décrit a tableet son theadélément, mais délègue le rendu du tbodyà un autre composant, comme ceci:
<table>
<thead>
<tr>
<th>Name</th>
<th>Time</th>
</tr>
</thead>
<tbody *ngFor="let entry of getEntries()">
<my-result [entry]="entry"></my-result>
</tbody>
</table>
Chaque composant myResult rend sa propre trbalise, essentiellement comme ceci:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
La raison pour laquelle je ne mets pas cela directement dans le composant parent (en évitant le besoin d'un composant myResult) est que le composant myResult est en fait plus compliqué que celui indiqué ici, donc je veux mettre son comportement dans un composant et un fichier séparés.
Le DOM résultant semble mauvais. Je pense que c'est parce qu'il est invalide, car tbodyil ne peut contenir que des tréléments (voir MDN) , mais mon DOM généré (simplifié) est:
<table>
<thead>
<tr>
<th>Name</th>
<th>Time</th>
</tr>
</thead>
<tbody>
<my-result>
<tr>
<td>Bob</td>
<td>128</td>
</tr>
</my-result>
</tbody>
<tbody>
<my-result>
<tr>
<td>Lisa</td>
<td>333</td>
</tr>
</my-result>
</tbody>
</table>
Existe-t-il un moyen d'obtenir le même rendu, mais sans la <my-result>balise d' emballage , et tout en utilisant un composant pour être seul responsable du rendu d'une ligne de table?
Je l' ai regardé ng-content, DynamicComponentLoaderla ViewContainerRef, mais ils ne semblent pas fournir une solution à ce pour autant que je peux voir.