Estoy luchando por encontrar una manera de hacer esto. En un componente principal, la plantilla describe a tabley su theadelemento, pero delega la representación tbodya otro componente, como este:
<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>
Cada componente myResult genera su propia tretiqueta, básicamente así:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
La razón por la que no pongo esto directamente en el componente principal (evitando la necesidad de un componente myResult) es que el componente myResult es en realidad más complicado de lo que se muestra aquí, por lo que quiero poner su comportamiento en un componente y archivo separados.
El DOM resultante se ve mal. Creo que esto se debe a que no es válido, ya tbodyque solo puede contener trelementos (ver MDN) , pero mi DOM generado (simplificado) es:
<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>
¿Hay alguna forma de que podamos obtener lo mismo renderizado, pero sin la <my-result>etiqueta de envoltura , y mientras todavía usamos un componente para ser el único responsable de renderizar una fila de la tabla?
He mirado ng-content, DynamicComponentLoaderel ViewContainerRef, pero no parecen proporcionar una solución a este por lo que yo puedo ver.