I had the same problem, where i need to use a string to select what component to build. After some digging I created a list of the components that is added to the NgModule
export and entryComponents lists.
template-components.ts
export const TEMPLATE_COMPONENTS: Type<any>[] = [
Temp1Component,
Temp2Component
]
in my NgModule
class I just add TEMPLATE_COMPONENTS to both exports
and entryComponents
In the component with the ComponentFactoryResolver
you generate a list of Types, with the same string as a key.
let templateTypes: { [name: string]: Type<{}> } =
TEMPLATE_COMPONENTS.reduce((p, c) => { p[c.name] = c; return p }, {})
// templateTypes = {'Temp1Component':Temp1Component,...}
this.componentFactoryResolver.resolveComponentFactory(templateTypes[string]);
This means that you only have to add the components to one place, simplifying adding more components.
Its probably possible to skip the whole TEMPLATE_COMPONENTS
in a separate list step and get the list directly from the NgModule
class, but that will be sometime in the future.