Я створюю таблицю даних для багаторазового використання, використовуючи ngx-datatable, і хотілося б, щоб у деталях рядка були відображені динамічні компоненти. Компонент даних, що отримує дані, отримує клас компонентів як аргумент від батьківського модуля, і я використовую ComponentFactory для створенняComponent. Я бачу, що конструктор і методи 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-даних, він працює, і динамічний модуль відображається та відображається.
<ng-content>
тегу для відображення будь-якої вкладеної розмітки.