Angular 延迟加载模块中的“角度材质”对话框
在我的Angular应用程序中,我有一个名为Angular 延迟加载模块中的“角度材质”对话框,angular,Angular,在我的Angular应用程序中,我有一个名为MaterialModule的模块,其中包括以下内容: imports: [ MatDialogModule, ... ], exports: [ MatDialogModule, ... ] 它在名为SharedModule的模块中导出: @NgModule({ imports: [ MaterialModule, ... ], exports: [ MaterialModule, ...
MaterialModule
的模块,其中包括以下内容:
imports: [
MatDialogModule,
...
],
exports: [
MatDialogModule,
...
]
它在名为SharedModule
的模块中导出:
@NgModule({
imports: [
MaterialModule,
...
],
exports: [
MaterialModule,
...
]
})
export class SharedModule { }
我想从我的一个延迟加载组件中显示一个对话框,因此在我的延迟加载模块中,我导入这个SharedModule
,并将对话框组件添加为条目组件:
@NgModule({
declarations: [
MyLazyLoadedComponent,
MyDialogComponent,
...
],
imports: [
CommonModule,
SharedModule,
...
],
entryComponents: [MyDialogComponent]
})
export class MyLazyLoadedModule { }
但是,每当我尝试从MyLazyLoadedComponent打开对话框时,都会收到以下错误消息:
未找到MyDialogComponent的组件工厂。你把它加进去了吗
@NgModule.entryComponents
从非延迟加载的组件打开对话框可以正常工作
如果您能就我的配置可能出现的问题提供任何建议,我将不胜感激。将组件放入NgModule声明的entryComponents部分将允许Angular将这些组件编译到组件工厂中,从而允许组件解析程序将它们添加到用于组件解析的内部映射中。 您需要直接在
MyLazyLoadedModule
中导入MatDialogModule
Angular v6+:如果您正在另一个可注入服务中使用
MatDialog
服务,并且正在为该服务使用{providedIn:'root'}
选项,您需要在声明对话框组件的模块的providers数组中提供该服务。您正试图在另一个模块中打开对话框,以便模块需要entry组件。您需要将其导出到sharedmodule中,并将其放入打开对话框的模块的entrycomponent中。我已将MatDialogModule
添加到imports
数组的MyLazyLoadedModule
。结果是一样的。您是否在另一个可注入服务中使用MatDialog服务,并且正在使用{providedIn:'root'}?是的,我有一个DialogService
和providedIn:'root'
。这就是我用来在应用程序中显示对话框的方法。因此,您需要在声明对话框组件的模块的providers数组中提供该服务。