Usiłuję znaleźć sposób, aby to zrobić. W komponencie nadrzędnym szablon opisuje a table
i jego thead
element, ale deleguje renderowanie tbody
do innego komponentu, na przykład:
<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>
Każdy składnik myResult renderuje swój własny tr
znacznik, zasadniczo w następujący sposób:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
Powodem, dla którego nie umieszczam tego bezpośrednio w komponencie nadrzędnym (unikając potrzeby komponentu myResult), jest to, że składnik myResult jest w rzeczywistości bardziej skomplikowany niż pokazano tutaj, więc chcę umieścić jego zachowanie w oddzielnym komponencie i pliku.
Wynikowy DOM wygląda źle. Uważam, że dzieje się tak, ponieważ jest nieprawidłowy, ponieważ tbody
może zawierać tylko tr
elementy (patrz MDN) , ale mój wygenerowany (uproszczony) DOM to:
<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>
Czy jest jakiś sposób, abyśmy mogli wyrenderować to samo, ale bez <my-result>
tagu opakowującego i nadal używając komponentu, który jest wyłączną odpowiedzialnością za renderowanie wiersza tabeli?
Mam spojrzał na ng-content
, DynamicComponentLoader
The ViewContainerRef
, ale nie wydaje się, aby zapewnić rozwiązanie tego ile widzę.