Вы можете ввести компонент динамически
Просто создайте компонент с помощью компонента @Input ();
export class DynamicContentComponent implements OnInit {
@Input() component: any;
@Input() data: any;
constructor(public viewContainerRef: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver) { }
ngOnInit() {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.component);
this.viewContainerRef.clear();
const componentRef = this.viewContainerRef.createComponent(componentFactory);
(<DynamicComponentRef>componentRef.instance).data = this.data;
}
}
И используйте его в HTML
<app-dynamic-content [component]="someComponent" [data]="data"></app-dynamic-content>
Пример данных
someComponent = SchedaPuntiVendita;
Динамические компоненты должны быть добавлены к entryComponents
в вашем module
Также вы можете создать некий factory
, который получит некоторую строку и в зависимости от того, вернет ли вам класс компонента
Пример фабрики
@Injectable()
export class DynamicContentComponentFactory {
constructor() { }
get(type: ContentType): any {
switch (type) {
case 'scheda':
return SchedaPuntiVendita;
}
}
и изменить DynamicContentComponent
немного
@Input() contentType: string;
constructor(..., private factory: DynamicContentComponentFactory) { }
...
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.factory.get(this.contentType));
...