Используйте ComponentFactoryResolver
для динамического добавления компонентов. Это дополнительно объясняется в угловых документах . Добавлено полное решение в stackblitz:
ComponentFactoryResolver . Итак, вот что я сделал:
создание таблицы в app.component.ts
:
createTable(container) {
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(TableComponent);
let viewContainerRef = this.insTable.viewContainerRef;
viewContainerRef.clear();
let componentRef = viewContainerRef.createComponent(componentFactory);
// let e = document.createElement("app-table");
// container.appendChild(e);
}
Директива, используемая как и точка привязки table.directive.ts
:
import { Directive, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[ins-table]',
})
export class TableDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
}
И app.component.html
:
<div #charts id="test">
<ng-template ins-table></ng-template>
</div>
И app.module.ts
с правильными декларациями, чтобы все это работало:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ChartModule } from 'angular-highcharts';
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';
import { TableComponent } from './table/table.component';
import { TableDirective } from './table/table.directive';
@NgModule({
imports: [BrowserModule, ChartModule, HttpClientModule],
declarations: [AppComponent, TableComponent, TableDirective],
bootstrap: [AppComponent],
providers: [HttpClientModule],
entryComponents: [
TableComponent
]
})
export class AppModule { }