Sto lottando per trovare un modo per farlo. In un componente padre, il modello descrive a table
e il suo thead
elemento, ma delega il rendering di tbody
a un altro componente, in questo modo:
<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>
Ogni componente myResult rende il proprio tr
tag, sostanzialmente in questo modo:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
Il motivo per cui non lo metto direttamente nel componente genitore (evitando la necessità di un componente myResult) è che il componente myResult è in realtà più complicato di quanto mostrato qui, quindi voglio mettere il suo comportamento in un componente e in un file separati.
Il DOM risultante sembra cattivo. Credo che questo sia perché non è valido, in quanto tbody
può contenere solo tr
elementi (vedi MDN) , ma il mio DOM generato (semplificato) è:
<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>
C'è un modo in cui possiamo ottenere la stessa cosa renderizzata, ma senza il <my-result>
tag di wrapping , e utilizzando ancora un componente per essere l'unico responsabile del rendering di una riga di tabella?
Ho guardato ng-content
, DynamicComponentLoader
la ViewContainerRef
, ma non sembrano fornire una soluzione a questo, per quanto posso vedere.