【问题标题】:Angular 8 - Is importing all material modules into the main app module better than importing individual material modules inside different modules?Angular 8 - 将所有材料模块导入主应用程序模块是否比在不同模块中导入单个材料模块更好?
【发布时间】:2019-07-15 10:49:46
【问题描述】:

将材料模块导入 Angular 8 项目的最佳方法是什么?是不是通过将material.module.ts导入app主模块,然后在其他模块中使用:

import { NgModule } from '@angular/core';

import {
  MatButtonModule,
  MatMenuModule,
  MatToolbarModule,
  MatIconModule,
  MatCardModule
} from '@angular/material';

@NgModule({
  imports: [
    MatButtonModule,
    MatMenuModule,
    MatToolbarModule,
    MatIconModule,
    MatCardModule
  ],
  exports: [
    MatButtonModule,
    MatMenuModule,
    MatToolbarModule,
    MatIconModule,
    MatCardModule
  ]
})
export class MaterialModule {}

或者干脆在各个模块中导入material的主要使用模块?

例如,如果我只在ProductsModule 中使用mat-card,我只需在产品模块中导入MatCardModule 即可。

【问题讨论】:

  • Module MaterialModule 自身导出

标签: angular angular-material angular8 angular-material-7


【解决方案1】:

这完全取决于您将在应用中使用 Angular Material 公开的所有组件的位置。

如果某些模块中只有某些组件使用 Angular Material 公开的组件,那么将这些模块导入到这些组件所属的模块中是有意义的。

例如: 假设您的应用程序具有三个模块:CartModuleCheckoutModuleProfileModule。并且只有您的 CartModule 使用 Angular 材质组件之一。此外,如果此 CartModule 是延迟加载的。在这种情况下,在CartModule 中导入特定的 Angular 材质模块会很有意义。


但是,在大多数情况下,情况并非如此。

在大多数情况下,为了保持一致的外观和感觉,我们通常倾向于在整个应用程序中使用 Angular Material 模块公开的大量组件。因此,在这种情况下,为了使其更加统一和易于管理,我们通常会创建一个AppMaterialModule,就像您在问题本身中所做的那样。然后我们import这个模块在我们想要使用这些组件的模块中。如果我们要在整个应用程序的不同模块中使用这些组件,我们通常会在SharedModule中导入AppMaterialModule并导出它从那里。这样一来,我们作为AppMaterialModule 的一部分公开的组件就可以在整个应用程序中访问。

希望这能消除您的疑虑。

【讨论】:

    【解决方案2】:

    最好的方法是只在他需要的每个组件中导入,在 app.module.ts 中只导入全局服务。 与 Angular 合作超过 2 年,但没有找到最佳解决方案

    【讨论】:

      【解决方案3】:

      是的,如果是这样的话

      如果我只在 products 模块中使用 mat-card,我只需导入 MatCardModule.

      这样也行。

      但是以后如果你想在 B 模块中使用它,你也不应该在那个模块中导入它。但是将 MatCarModule 移动到 MaterialModule。

      并且 MaterialModule 应该是由 Shared 模块导入和导出的。

      不建议在每个模块中直接导入,原因有二:

      1. 如果 B 和 Products 模块被延迟加载,那么相同的 MatCardModule 将最终出现在两个块中(这很糟糕)
      2. 由于这是一个组件模块,我们很可能最终也会在其他地方使用它。因此首选 MaterialModule 方式。

      【讨论】:

        【解决方案4】:

        好吧,如果您在整个应用程序中使用角度材质组件,您应该将您的角度材质模块放在共享模块中,有些可能是 shared/modules/material.modules.ts,但如果您只有少数几个组件在您的应用程序中,您应该只在特定组件中导入材质模块...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-21
          • 2018-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多