все!
Я использовал для загрузки и рендеринга своих компонентов по его имени с помощью службы, используя 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 ERROR Error: Uncaught (in promise): Error: Cannot find module 'details-products/details-products.component'
Error: Cannot find module 'details-products/details-products.component'
Я пытался с большим количеством путей к компоненту и тем не менее получая ту же ошибку.
Есть идеи? Любые другие способы рендеринга компонента в Angular 9 с помощью Ivy?
EDIT:
Я пробовал импортировать, как сказано в блогах. Например:
import('src/app/my-component.ts')
Это сработает для меня, НО, если я сделаю следующее:
let src = 'src/app/my-component.ts';
import(src);
Тогда это не сработает и выбрасывает ошибка не может найти модуль.
Есть идеи?