Tôi đang tạo một dữ liệu có thể sử dụng lại bằng cách sử dụng ngx-datable và tôi muốn có các thành phần động được hiển thị bên trong chi tiết hàng. Thành phần có thể truy cập nhận được một lớp thành phần dưới dạng đối số từ mô đun mẹ và tôi sử dụng ElementFactory để tạoComponent. Tôi có thể thấy rằng hàm tạo và các phương thức onInit đang chạy cho thành phần động nhưng nó không được gắn vào DOM.
Đây là những gì html có thể truy xuất được cho chi tiết hàng:
<!-- [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] -->
Và đây là tệp .ts của tôi trông như thế nào:
@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);
}
Một điểm khác là nếu #dynamicPlaceholder
mẫu ng của tôi được đặt bên ngoài ngx-datable, nó hoạt động và mô-đun động được hiển thị và hiển thị.
<ng-content>
thẻ để hiển thị bất kỳ đánh dấu lồng nhau nào.