Estou lutando para encontrar uma maneira de fazer isso. Em um componente pai, o modelo descreve um tablee seu theadelemento, mas delega a renderização de tbodypara outro 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 renderiza sua própria trtag, basicamente assim:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
O motivo pelo qual não estou colocando isso diretamente no componente pai (evitando a necessidade de um componente myResult) é que o componente myResult é, na verdade, mais complicado do que o mostrado aqui, portanto, quero colocar seu comportamento em um componente e arquivo separados.
O DOM resultante parece ruim. Acredito que seja porque ele é inválido, pois tbodysó pode conter trelementos (consulte MDN) , mas meu DOM gerado (simplificado) é:
<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 alguma maneira de obtermos a mesma coisa renderizada, mas sem a <my-result>marca de empacotamento , e ainda usando um componente para ser o único responsável por renderizar uma linha da tabela?
Eu olhei ng-content, DynamicComponentLoader, o ViewContainerRef, mas eles não parecem fornecer uma solução para este, tanto quanto eu posso ver.