【发布时间】:2016-12-07 13:15:43
【问题描述】:
我正在努力寻找一种方法来做到这一点。在父组件中,模板描述了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 元素(see 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,但据我所知,它们似乎没有提供解决方案。
【问题讨论】:
-
你能举个例子吗?
-
正确的答案就在那里,有一个 plunker 样本stackoverflow.com/questions/46671235/…
-
建议的答案都不起作用,或者不完整。此处使用 plunker 示例描述了正确答案stackoverflow.com/questions/46671235/…
标签: javascript angular