角度路由器延迟加载依赖模块的入口组件如何工作,但自定义延迟加载模块没有问题

时间:2019-07-08 13:06:56

标签: angular angular-material angular6

出于某些正当的原因,我试图从我的angular 6应用中删除路由(在这种情况下为懒惰)。我正在使用NgModuleFactoryLoader加载动态组件和模块。请参阅下面的文章

https://netbasal.com/the-need-for-speed-lazy-load-non-routable-modules-in-angular-30c8f1c33093

所以我有一个惰性模块ModuleA,它依赖于mat-dialog,该模块加载了另一个模块FilterComponent提供的entryComponent的名为FilterModule的组件(已添加到imports数组中)而不是其他任何地方)。

//Ignore the syntax
CompA {
  openDialog() {
    matDialog.open(FilterComponent)
  }
}

ModuleA {
  imports: [MatDialog, FilterModule],
  declaration: [CompA]
}

FilterModule {
  declaration: [FilterComponent],
  entryComponent: [FilterComponent]
}

FilterComponent { ...
}

使用适当的惰性路由,mat-dialog可以毫无问题地打开FilterComponent。但是,当我尝试通过使用自定义方法成功加载模块来打开对话框时,出现以下错误

  

未找到FilterComponent的组件工厂。您是否将其添加到@ NgModule.entryComponents?

在github中也有一个未解决的错误,但是我很好奇惰性路由如何工作而没有任何问题。

https://github.com/angular/components/issues/16431

1 个答案:

答案 0 :(得分:0)

如果组件是模块的一部分,并且您想在其他模块中使用该组件,

然后将组件放入出口,而不是进入组件。

FilterModule {
  declaration: [FilterComponent],
  exports: [FilterComponent]
}

现在,每当您将此模块导入任何其他模块时,该组件也可用于其他组件。