【问题标题】:How angular router lazy loading dependent modules entryComponents works without issue but not the custom lazy loaded module角度路由器延迟加载依赖模块 entryComponents 如何正常工作,但自定义延迟加载模块没有问题
【发布时间】:2019-11-18 00:14:35
【问题描述】:

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

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

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

//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

【问题讨论】:

    标签: angular angular-material angular6


    【解决方案1】:

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

    然后将组件放在导出而不是入口组件中。

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

    现在,只要您在任何其他模块中导入此模块,此组件也可用于其他组件。

    【讨论】:

    • 我没有在 html 中使用其他组件。它已被 mat 对话框使用。
    猜你喜欢
    • 2019-04-03
    • 2020-02-27
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    相关资源
    最近更新 更多