我曾经使用 ComponentFactoryResolver 使用服务按名称加载和呈现我的组件。
这是代码的一部分,用于渲染组件
//Get the Type of the component by its string's name
const type: Type<any> = await this.getTypeOfComponent(component);
//Call the factory for create the component
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(type);
const componentRef = componentFactory.create(new DialogInjector(this.injector, data));
this.appRef.attachView(componentRef.hostView);
//Attach the component
const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;
document.querySelector('.flyout').firstChild.appendChild(domElem);
this.dialogComponentRef = componentRef;
return homeRef;
我使用函数getTypeOfComponent中的两行获得了组件的类型:
let factories = Array.from(this.componentFactoryResolver['_factories'].values());
let factoryClass: any = factories.find((x: any) => x.componentType.name === component);
return factoryClass.componentType;
我在 Angular 9 中使用 Ivy 阅读过,您必须导入组件以进行“延迟加载”并渲染组件。
使用例如
this.foo = import(`./foo/foo.component`)
.then(({ FooComponent }) => FooComponent);
但是我无法做到这一点,我总是遇到同样的错误
core.js:5845 错误错误:未捕获(承诺):错误:找不到模块“details-products/details-products.component”错误:找不到模块“details-products/details-products.component”
我已经尝试了很多组件路径,但仍然遇到相同的错误。
有任何想法吗?在 Angular 9 中使用 Ivy 渲染组件的任何其他方式?
编辑:
我已经尝试过博客所说的导入。例如:
import('src/app/my-component.ts')
这对我有用,但如果我做下一个:
let src = 'src/app/my-component.ts';
import(src);
然后这将不起作用并抛出找不到模块的错误。
有任何想法吗?