Я изо всех сил пытаюсь найти способ сделать это. В родительском компоненте шаблон описывает 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
, но они , кажется, не обеспечивают решение этой проблемы , насколько я могу видеть.