I'm trying to call a component dynamically. I have a component that gets child component type as input(string). for example detail.itemType = 'Accordion'. i want this component to call the right child component based on the type but not using if statement
import { ContentDetail, ContentFields } from 'app/models/content/content.model';
import { Component, OnInit, Input, ComponentFactoryResolver, ViewChild, ViewContainerRef, ComponentRef } from '@angular/core';
import { AccordionComponent } from './accordion-paragraph/accordion-paragraph.component';
@Component({
selector: 'app-content-components',
templateUrl: './content-components.component.html',
styleUrls: ['./content-components.component.scss']
})
export class ContentComponentsComponent implements OnInit {
constructor(private componentFactoryResolver: ComponentFactoryResolver) { }
@ViewChild('createComponent', {static: true, read: ViewContainerRef }) entry: ViewContainerRef;
@Input() public detail: ContentDetail = new ContentDetail();
ngOnInit() {
let component: any = null;
if(this.detail.itemType === 'Accordion'){
component = AccordionComponent;
let factory = this.componentFactoryResolver.resolveComponentFactory(component);
let componentRef:ComponentRef<any> = this.entry.createComponent(factory);
}
}
}
so I want to add Accordion dynamically instead of using if statement. something like:
let componentName = Accordion
component = componentName + Component;
let factory = this.componentFactoryResolver.resolveComponentFactory(component);
let componentRef:ComponentRef<any> = this.entry.createComponent(factory);
is it possible to add component name like that?