gpt4 book ai didi

javascript - AppModule 中导入的共享模块

转载 作者:行者123 更新时间:2023-12-03 15:20:55 24 4
gpt4 key购买 nike

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

我没有找到任何关于此的内容,只是一个 GitHub 问题,指出最好不要导入它。然而没有任何深入的解释......

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

Angular 不鼓励在共享模块中提供服务,我确实同意这一点。但没有别的。

所以我的问题是:

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

后果可能是什么?

提前感谢任何人

最佳答案

导入 SharedModule 的问题进入AppModule是提供者将在功能模块中注入(inject)两次(一次是 SharedModule ,一次是 AppModule ),这将导致服务不像它们应该的那样是单例的。

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

export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
...
]
};
}
}

导入 SharedModule 时进入 AppModule , 使用 SharedModule.forRoot() ,当您将其导入功能模块时,只需将其导入为 SharedModule

关于javascript - AppModule 中导入的共享模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com