我正在使用自定义角度组件,我需要显示两次投影内容。
假设我有这个 html:
<app-awesome>
<app-awesome-card *ngFor="let card of cards">
<h1>{{card.title}}</h1>
<img [src]="card.thumbnail">
</app-awesome-card>
</app-awesome>
因此,在awesome-card.component.html中,投影的内容将是一些我想投影两次的卡片组件。
可能是这样的:
<div class="awesome-class">
<ng-content select="app-awesome-card"></ng-content>
</div>
<div class="more-awesome-class">
<ng-content select="app-awesome-card"></ng-content>
</div>
但这不起作用,因为 ng-content 只是“粘贴”模板,不能复制。即使我像这样使用 ng-template:
<div class="awesome-class">
<ng-container *ngTemplateOutlet="content"></ng-container>
</div>
<div class="more-awesome-class">
<ng-container *ngTemplateOutlet="content"></ng-container>
</div>
<ng-template #content>
<ng-content select="app-awesome-card"></ng-content>
</ng-template>
这也行不通。
我已经尝试了一周来找到一个优雅的解决方案,但我做不到。仅直接修改 DOM,但这是一种不好的做法。我看过一些类似的老问题,甚至是 Github 对此提出的要求,但当时似乎没有人知道答案。
PD:ContentChild 也不会工作,因为它不能看透投影的内容(或者我相信的东西)
编辑 如果我可以访问投影的内容信息,我可以手动渲染内容,但我尝试的一切都失败了