Dynamic Component inside ngx-datatable row-detail
We can't render a component into a Template (<ng-template>
) at runtime with createComponent
because afaik templates get processed by Angular at compile time. So we need a solution that works at compile time.
Solution with drawbacks
ng-content
can help us here:
<!-- [Row Detail Template] -->
<ngx-datatable-row-detail rowHeight="100" (toggle)="onDetailToggle($event)">
<ng-template let-row="row" let-expanded="expanded" ngx-datatable-row-detail-template>
<ng-content></ng-content>
</ng-template>
</ngx-datatable-row-detail>
<!-- [/Row Detail Template] -->
We can then pass anything we want to the detail view:
<my-table>From the ouside but I cant access the current row :(</my-table>
But there is a problem: We can't use ng-content
when we want to access the current row in the passed template.
Solution
But ngx-datatable
got us covered. We can pass a template to thengx-datatable-row-detail
directive:
<ngx-datatable-row-detail [template]="myDetailTemplate "rowHeight="100" (toggle)="onDetailToggle($event)">
</ngx-datatable-row-detail>
The template can then be passed into from any component on the outside via a @Input
variable:
<ng-template #myDetailTemplate let-row="row">
From the outside with access to the current row: {{row.name}}
</ng-template>
Take a look at the stackblitz, where I wrote a my-table
component as poc.