我在使用 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?
似乎显示组件的唯一方法是在 中导入模块app.module.ts
,尽管它违背了延迟加载模块的目标。
有没有办法做到以上几点,或者我错过了一些关于延迟加载模块和组件的基本知识?