Ich erstelle eine wiederverwendbare Datentabelle mit ngx-datatable und möchte, dass dynamische Komponenten innerhalb der Zeilendetails gerendert werden. Die datierbare Komponente empfängt eine Komponentenklasse als Argument von einem übergeordneten Modul, und ich verwende ComponentFactory, um Component zu erstellen. Ich kann sehen, dass der Konstruktor und die onInit-Methoden für die dynamische Komponente ausgeführt werden, aber nicht an das DOM angehängt werden.
So sieht das datierbare HTML für das Zeilendetail aus:
<!-- [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] -->
Und so sieht meine .ts-Datei aus:
@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);
}
Ein weiterer Punkt ist, dass wenn meine #dynamicPlaceholder
ng-Vorlage außerhalb von ngx-datatable platziert wird, sie funktioniert und das dynamische Modul gerendert und angezeigt wird.
<ng-content>
Tag zum Rendern verschachtelter Markups.