【问题标题】:Should the core module import the shared module in Angular2核心模块是否应该在 Angular2 中导入共享模块
【发布时间】:2019-07-15 11:23:33
【问题描述】:

根据一些关于如何构建 Angular 应用程序的建议,我最终得到了这个文件组织:

- app
    - core
        - header
        - sidenav
        core.module.ts
    - shared
        - material
            custom-material.module.ts
        shared.module.ts
    - features
    app.module.ts
  • 我有一个核心模块和一个共享模块
  • 核心模块导出HeaderComponentSidenavComponent等全局组件
  • 共享模块导出一个CustomMaterial子模块(听说是做事的方式)
  • CustomMaterial 子模块导出我需要的不同材质组件
  • app 模块只导入核心模块(因为共享模块只能由需要它的元素导入)
  • features/ 中的模块是延迟加载的

但是现在,我的问题是:我的标题组件需要一些材料组件。

我应该将我的共享模块导入我的核心模块还是我的应用模块?但这对我来说似乎是一种反模式。

【问题讨论】:

  • 这个问题已经很老了,给出的唯一答案似乎并没有真正回答这个问题。我也来到这里寻找答案。根据我的发现,CoreModule 导入SharedModule 似乎是可以的,但不应该导出它。

标签: javascript angular angular-material


【解决方案1】:

您唯一需要做的就是创建一个 shared.module.ts ,您应该在其中导入所有要在任何地方使用的材料模块(MatInputModule、MatButtonModule 等)并导出所有这些导入的模块(其中使您能够将它们导入另一个模块,调用此共享模块)。

之后要做的小事就是导入这个包含所有材料模块的共享模块,例如在你的页眉模块和页脚模块中(如果你当然需要 MatInputModule)

希望我已经清楚了

祝你有美好的一天!

【讨论】:

  • 但是这种方式共享模块被导入到头模块中,即被导入到核心模块中,即被导入到应用程序模块中......我听说导入不是一个好习惯共享模块到应用程序模块,暗示共享模块是全局的,我错了吗?也有美好的一天:)
  • 如果您正在执行延迟加载,则不会;)。例如,共享模块将在 HeaderModule 中加载,但不会在 app.module 中加载,因为它不会在运行时导入到 app.module ;)
  • 即使我的 HeaderModule 在我的 CoreModule 中?我的意思是,CoreModule 内部没有路由,并且 HeaderModule 没有延迟加载,你能解释一下为什么它不会在运行时导入吗?
【解决方案2】:

导入所需的模块应该是理想的,除非你不是 面临两个或多个模块之间的递归导入冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2018-04-16
    • 2019-06-17
    • 2021-01-10
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多