Sto creando un datatable riutilizzabile usando ngx-datatable e vorrei avere componenti dinamici resi nei dettagli della riga. Il componente datatable riceve una classe di componente come argomento da un modulo padre e io uso ComponentFactory per creareComponent. Vedo che il costruttore e i metodi onInit sono in esecuzione per il componente dinamico ma non è collegato al DOM.
Ecco come appare l'html datatable per il dettaglio riga:
<!-- [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] -->
E questo è come appare il mio file .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);
}
Un altro punto è che se il mio #dynamicPlaceholder
ng-template viene posizionato al di fuori di ngx-datatable, funziona e il modulo dinamico viene visualizzato e visualizzato.
<ng-content>
tag per eseguire il rendering di qualsiasi markup nidificato.