Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在AppModule中导入的共享模块_Angular - Fatal编程技术网

Angular 在AppModule中导入的共享模块

Angular 在AppModule中导入的共享模块,angular,Angular,我正在阅读关于模块的文档,寻找一行不鼓励在AppModule中导入SharedModule的内容 我没有发现这方面的任何东西,只是一个GitHub问题,它指出最好不要导入它。然而,没有任何深刻的解释 Angular不鼓励在共享模块中提供服务,我确实同意这一点。但没有别的 所以我的问题是: 由于我的所有功能模块都是延迟加载的,需要导入共享模块,但我的应用程序组件也需要使用同一共享模块提供的内容,因此将其导入AppModule是一种不好的做法吗 后果可能是什么 提前感谢所有人将SharedModu

我正在阅读关于模块的文档,寻找一行不鼓励在AppModule中导入SharedModule的内容

我没有发现这方面的任何东西,只是一个GitHub问题,它指出最好不要导入它。然而,没有任何深刻的解释

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

所以我的问题是:

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

后果可能是什么


提前感谢所有人

SharedModule
导入
AppModule
的问题在于,提供程序将在功能模块中注入两次(一次由
SharedModule
注入,一次由
AppModule
注入)这将导致服务不再像人们想象的那样是单身

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

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

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

导入即可,只需查看此链接在
AppModule
中导入共享模块不是一种坏做法

共享模块是关于拥有公共模块,例如如果您有
表单模块
某些模块
,则需要在所有模块上使用这些模块,而不是在所有模块中导入。您可以在
共享模块
中导入这些模块,然后将其导出-查看链接以了解更多说明

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

@Injectable({
    providedIn: 'root'
})
在您的服务顶部使用此装饰器,它将自动将您的服务注入根模块


谢谢-快乐编码

只要您避免在共享模块内声明服务,我看不出有任何问题。

对!谢谢你的提示!除此之外,你没有看到任何其他“问题”?唯一让我担心的是SharedModule可能会随着时间的推移而增长,那么当用户在加载AppModule时部署和请求它时,它会成为一个巨大的庞然大物吗?对我来说,唯一可能发生的另一件事确实是共享模块变得非常大,并导致每个JS块(初始或延迟加载)也变得很大,使用可能未使用的代码(即使树震动看起来相当有效)。但我认为这是一个问题,如果它发生了,你会有时间看到它的到来。将下面的答案标记为已接受,因为它指出了一个重要的步骤,除此之外,即使你的答案也是有效的,所以我投了赞成票。谢谢你的时间:)没问题-谢谢