Angular 中的服务应该放在哪里?核心模块还是共享模块?

Don*_*Kim 4 angular

我已经浏览了文档,它说/建议将服务放在 下,CoreModule如果它们将在整个应用程序中使用,而不是将服务包含在 下,SharedModule因为如果将服务导入到延迟加载中,可能会出现一些意外的结果模块。所以我打算遵循该指南,但我遇到了一些文章,这些文章说可以将服务保留在 下,然后使用静态方法SharedModule将其导入到 中。我明白该方法试图表达的意思,但我不明白这种方法有什么更好的地方。两种方法各有优缺点吗?或者我可以按照文档中的指导采用方法吗?AppModuleforRootCoreModule

Aks*_*put 10

默认情况下,服务是单例的,即如果您在父模块中提供服务并且两个子组件使用相同的服务,则服务中的任何更改都将在两个组件中更新,假设您已在模块和组件中提供服务同样,将创建两个服务实例,因此两个组件中使用的服务将不同。

因此,回到您的问题,提供服务的理想位置将是使用该服务的模块或根模块。

不要在共享模块中提供服务,建议将服务添加到核心模块的原因是您始终在根模块中导入核心模块,因此可以在整个应用程序中访问相同的服务。

如果您不知道它们在底层如何工作,那么在子模块或组件级别提供服务可能会导致意外错误,因此保持简单,您可以在根级别提供服务(不会导致延迟加载中的任何问题,因为出色地)。

PS,您可以在应用程序中的任何位置编写服务,只需将 root 添加到其装饰器即可。

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

无论您将它们写入何处,都无关紧要,因为只会创建一个服务实例。