У меня проблемы с загрузкой компонента из лениво загруженного модуля с использованием 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 plus import на уровне 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?
Кажется, что единственный способ показать компонент - это импортировать модуль в app.module.ts
, хотя это не соответствует цели иметь лениво загруженный модуль.
Есть ли способ сделать выше илиЯ что-то упустил из-за ленивой загрузки модулей и компонентов?