Angular 延迟加载模块中的“角度材质”对话框

Angular 延迟加载模块中的“角度材质”对话框,angular,Angular,在我的Angular应用程序中,我有一个名为MaterialModule的模块,其中包括以下内容: imports: [ MatDialogModule, ... ], exports: [ MatDialogModule, ... ] 它在名为SharedModule的模块中导出: @NgModule({ imports: [ MaterialModule, ... ], exports: [ MaterialModule, ...

在我的Angular应用程序中,我有一个名为
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数组中提供该服务。