最佳答案
我正在努力寻找一种方法来做到这一点。在父组件中,模板描述 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
,但他们似乎没有提供一个解决方案,这是我所能看到的。