【问题标题】:Angular Material available only when imported via Shared Module in Router ModuleAngular Material 仅在通过路由器模块中的共享模块导入时可用
【发布时间】:2020-04-21 10:50:31
【问题描述】:

按照 Angular 指南,我正在尝试创建一个包含多个功能模块的示例项目。

为了在每个模块中使用 Angular Material,我创建了一个共享模块来导入和导出这些材质模块。在需要 Angular 材质的地方导入此共享模块。

根据指南,每个功能模块都应该有自己的路由器模块,因此我为每个功能创建了一个。

我想只保留路由模块中的路由相关项目,因此将共享模块导入功能模块中,令我惊讶的是它不起作用,即材料指令不起作用。

//Feature Module
@NgModule({
    imports: [..., SharedModule], //SharedModule import doesn't make material available
    declarations: []
})

一旦我在路由器模块中导入了这个共享模块,材质组件就开始工作了。

//Feature Router Module
@NgModule({
    imports: [..., SharedModule], //SharedModule makes material available
    declarations: []
})

如何通过在功能模块中导入共享模块使其工作?

演示地址:https://stackblitz.com/edit/angular-segregated-modules?embed=1&file=src/app/Modules/Sub/sub.module.ts

【问题讨论】:

  • 仅供参考:这种推荐的方法多年来对我来说效果不佳。我停止使用共享模块来导入材料模块。我发现无法判断使用了哪些模块。所以你不妨只导入所有东西,因为在几个月内这基本上就是要发生的事情。所以我更喜欢创建只直接导入他们需要的 Material 模块的小型共享模块。每个模块一个组件的方法对我来说效果很好。
  • 感谢@Reactgular 的建议

标签: angular angular-material angular-routing angular-module


【解决方案1】:

查看您链接的 StackBlitz,SubComponentSubRoutesModule 中声明。该组件只能访问它声明的模块的导入,这解释了您描述的问题。

如何通过在功能模块中导入共享模块来使其工作?

SubRoutesModule 中的声明中删除SubComponent,并将其添加到SubModule 中的声明中。

【讨论】:

  • 谢谢!但是我无论如何都必须在路由模块中再次导入SubComponent 以将其包含在路由中?我希望仅通过在声明数组中导入而不包括组件不是 angular to 的开销。只是想再次确认,虽然我很确定。
  • 是的,这是正确的。您需要在文件顶部导入SubComponent,以便您可以使用它创建路由,但它不应包含在路由器模块@NgModule元数据的声明中
猜你喜欢
  • 2017-11-29
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
相关资源
最近更新 更多