在AppModule中导入的共享模块

Cai*_*ius 4 angular

我正在阅读有关模块的Angular文档,寻找不鼓励在AppModule中导入SharedModule的行。

我什么都没找到,只是一个GitHub问题,指出最好不要导入它。但是没有任何深入的解释...

https://github.com/tomastrajan/angular-ngrx-material-starter/issues/47

Angular不鼓励在Shared模块中提供服务,我的确同意。但没有别的。

所以我的问题是:

由于我所有的功能模块都是延迟加载的,并且需要导入共享模块,而且我的应用程序组件也需要使用同一共享模块提供的内容,因此将其导入AppModule是一种不好的做法吗?

结果可能是什么?

在此先感谢任何人

Rah*_*hul 8

只需查看此链接共享模块,将共享模块导入其中是一个不错的做法AppModule

共享模块是关于拥有通用模块,例如如果您拥有form module some module所有模块都需要的模块,而不是在所有模块中导入您可以将其导入shared module并导出相同的模块 - 检查链接以获取进一步说明

对于服务,它可以只注入到一个模块中AppModule-injectable如果已注入根模块,则可以在任何模块中使用服务

@Injectable({
    providedIn: 'root'
})
Run Code Online (Sandbox Code Playgroud)

在您的服务顶部使用此装饰器,它会自动将您的服务注入根模块

谢谢 - 快乐编码!!


Twi*_*her 6

将导入SharedModule到中的问题AppModule在于,提供程序将在功能模块中注入两次(一次通过SharedModule,一次通过AppModule),这将导致服务不像预期的那样单身。

实现此目标的常见模式不是直接在@NgModule声明上公开提供程序,而是在静态forRoot函数中(名称不是强制性的,这是一个约定),如下所示:

export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [
         ...
      ]
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

导入当SharedModule进入AppModule,使用SharedModule.forRoot(),当你导入一个功能模块中只导入为SharedModule