Estoy creando una tabla de datos reutilizable usando ngx-datatable y me gustaría tener componentes dinámicos representados dentro de los detalles de la fila. El componente de tabla de datos recibe una clase de componente como argumento de un módulo principal y yo uso ComponentFactory para crear un Componente. Puedo ver que el constructor y los métodos onInit se están ejecutando para el componente dinámico, pero no se está adjuntando al DOM.
Así es como se ve el html de la tabla de datos para el detalle de fila:
<!-- [Row Detail Template] -->
<ngx-datatable-row-detail rowHeight="100" #myDetailRow (toggle)="onDetailToggle($event)">
<ng-template let-row="row" #dynamicPlaceholder let-expanded="expanded" ngx-datatable-row-detail-template>
</ng-template>
</ngx-datatable-row-detail>
<!-- [/Row Detail Template] -->
Y así es como se ve mi archivo .ts:
@ViewChild('myDetailRow', {static: true, read: ViewContainerRef}) myDetailRow: ViewContainerRef;
@ViewChild('dynamicPlaceholder', {static: true, read: ViewContainerRef}) dynamicPlaceholder: ViewContainerRef;
renderDynamicComponent(component) {
var componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
var hostViewConRef1 = this.myDetailRow;
var hostViewConRef2 = this.dynamicPlaceholder;
hostViewConRef1.createComponent(componentFactory);
hostViewConRef2.createComponent(componentFactory);
}
Otro punto es que si mi #dynamicPlaceholder
plantilla ng se coloca fuera de ngx-datatable, funciona y el módulo dinámico se representa y se muestra.
<ng-content>
etiqueta para representar cualquier marcado anidado.