У меня возникают проблемы с загрузкой компонента из ленивого загруженного модуля, используя Angular 6.
Я создал библиотеку, используя библиотеку CLI - ng generate library @org/chat
Обновлен файл angular.json
для включения:
"lazyModules": [
"dist/org/chat"
],
и затем успешно загрузить модуль через AppComponent:
constructor(private _injector: Injector, private loader: SystemJsNgModuleLoader, public dialog: MatDialog) {}
load() {
this.loader.load('dist/org/chat#ChatModule').then(moduleFactory => {
const moduleRef = moduleFactory.create(this._injector);
});
}
Пока что так хорошо, и модуль загружается.
Однако у ChatModule есть компонент, называемый ChatPopupComponent, и я не могу найти способ показать его с помощью диалога (или путем добавления его в контейнер ViewChild).
Чтобы открыть компонент в диалоговом окне, его необходимо объявить в модуле entryComponents и импортировать на уровне AppComponent:
let dialogRef = this.dialog.open(ChatPopupComponent
data: {}
});
Но при непосредственном импорте компонента (и его экспорте из библиотеки) я получаю следующую (очевидную) ошибку: " Component ChatPopupComponent is not part of any NgModule or the module has not been imported into your module
". Так как это ленивый загруженный модуль, он явно еще не импортирован.
Когда я попробую следующее:
let name: any = 'ChatPopupComponent';
let dialogRef = this.dialog.open(name
data: {}
});
Я получаю следующую error loading module Error: No component factory found for EmailPopUpComponent. Did you add it to @NgModule.entryComponents?
error loading module Error: No component factory found for EmailPopUpComponent. Did you add it to @NgModule.entryComponents?
Кажется, что единственный способ показать компонент - импортировать модуль в app.module.ts
, хотя он не соответствует цели наличия ленивого загруженного модуля.
Есть ли способ сделать это, или мне не хватает чего-то рудиментарного относительно ленивых модулей загрузки и компонентов?