【问题标题】:Angular NgModule Documentation ConfusionAngular NgModule 文档混乱
【发布时间】:2021-02-15 04:42:03
【问题描述】:

我对以下与其他模块中的组件和服务相关的文档感到困惑。 https://angular.io/guide/sharing-ngmodules#using-components-vs-services-from-other-modules

我了解文档中的说明,导入 NgModule 的典型用途是获得对共享组件、管道和指令的访问权限。

它还声明了以下内容: “使用服务导入模块意味着您将拥有该服务的新实例,这通常不是您所需要的(通常希望重用现有服务)。使用模块导入来控制服务实例化。” em>

这就是我困惑的地方。我对 DI 系统的理解(至少在一个急切加载的应用程序中)是,如果您导入一个共享模块并将一个服务列为提供者,那么该服务最终将在根注入器中注册。 NgModule 导入树在编译过程中被展平,每个服务提供者都注册在根注入器中。

这里的文档说“使用服务导入模块意味着您将拥有该服务的新实例”。这不一定是真的。

我在这里遗漏了什么吗?当他们提到模块时,他们不是指 NgModule 吗?

【问题讨论】:

    标签: angular dependency-injection angular-services ng-modules


    【解决方案1】:

    如果您将共享模块与列为提供者的服务一起导入,该服务最终将在根注入器中注册

    通过可注入装饰器中的新选项 provideIn,在任何地方使用 provideIn 效率更高,因此您可以将服务文件放在任何您想要的位置,而不是在模块中提供它们。

    检查此网址以获取有关提供商和此选项的更多信息: https://angular.io/guide/providers

    在这里您可以使用 provideIn 选项并查看注入范围:https://stackblitz.com/edit/angular-dp1ucw?file=src/app/user.service.ts

    【讨论】:

    • 感谢您的信息。它不一定回答我最初的问题,尽管关于使用提供程序导入模块和声明“使用服务导入模块意味着您将拥有该服务的新实例”。虽然您可以在可注入装饰器中使用 providedIn,但您仍然可以在技术上使用提供程序导入 NgModules。 angular.io/guide/providers#providedin-and-ngmodules
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多