J'ai du mal à trouver un moyen de le faire. Dans un composant parent, le modèle décrit a table
et 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 tr
balise, 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 tbody
il 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
, DynamicComponentLoader
la ViewContainerRef
, mais ils ne semblent pas fournir une solution à ce pour autant que je peux voir.