您的应用程序的问题是它ng-template
不渲染任何东西,所以ng-content
也不渲染任何东西。我目前看不到您的任何附加值,TableComponent
因为它目前仅重新发送模板,但这可能是因为它只是一个演示,它会在您的情况下具有一些附加值。
您需要更改您TableComponent
以PrimeTemplate
从内容中获取 s 并将它们重新发送到p-table
:
export class TableComponent implements AfterContentInit {
@Input()
public data: any[];
@ContentChildren(PrimeTemplate)
templates: QueryList<any>;
headerTemplate: TemplateRef<any>;
bodyTemplate: TemplateRef<any>;
constructor() { }
gePrimeTemplateByType(type: string): PrimeTemplate {
return this.templates.find(template => {
return template.getType() === type;
});
}
ngAfterContentInit() {
this.headerTemplate = this.gePrimeTemplateByType('header').template;
this.bodyTemplate = this.gePrimeTemplateByType('body').template;
}
}
在您的模板中:
<p-table [value]="data">
<ng-template pTemplate="header">
<ng-container *ngTemplateOutlet="headerTemplate">
</ng-container>
</ng-template>
<ng-template pTemplate="body" let-data>
<ng-container *ngTemplateOutlet="bodyTemplate; context:{$implicit: data}">
</ng-container>
</ng-template>
</p-table>
这是完整的分叉 stackblitz 演示。
当然,还有其他方法可以实现这一点,例如,您TableComponent
可能只有 2 个@Input
s,然后将它们重新发送到p-table
而不是使用PrimeTemplate
s。