Я изо всех сил пытаюсь найти способ сделать это. В родительском компоненте шаблон описывает a tableи его theadэлемент, но делегирует отрисовку tbodyдругому компоненту, например:
<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>
Каждый компонент myResult отображает свой собственный trтег, примерно так:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
Причина, по которой я не помещаю это непосредственно в родительский компонент (избегая необходимости в компоненте myResult), заключается в том, что компонент myResult на самом деле сложнее, чем показано здесь, поэтому я хочу поместить его поведение в отдельный компонент и файл.
В результате DOM выглядит плохо. Я считаю, что это потому, что он недействителен, так как tbodyможет содержать только trэлементы (см. MDN) , но моя сгенерированная (упрощенная) DOM:
<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>
Есть ли способ получить то же самое, но без <my-result>тега обертывания и при этом использовать компонент, который будет нести единоличную ответственность за визуализацию строки таблицы?
Я смотрел ng-content, DynamicComponentLoader, то ViewContainerRef, но они , кажется, не обеспечивают решение этой проблемы , насколько я могу видеть.