Я создаю повторно используемую таблицу данных, используя ngx-datatable, и я хотел бы, чтобы динамические компоненты отображались внутри детали строки. Компонент datatable получает класс компонента в качестве аргумента от родительского модуля, и я использую ComponentFactory для createComponent. Я вижу, что конструктор и методы onInit работают для динамического компонента, но он не присоединен к DOM.
Вот как HTML-код данных выглядит для детализации строк:
<!-- [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] -->
И вот как выглядит мой .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);
}
Другой момент заключается в том, что если мой #dynamicPlaceholder
ng-шаблон находится вне ngx-datatable, он работает, и динамический модуль отображается и отображается.
<ng-content>
тега для отображения любой вложенной разметки.