gpt4 book ai didi

angular - @Injectable 的语义(providedIn : 'root' )?

转载 作者:太空狗 更新时间:2023-10-29 17:45:03 28 4
gpt4 key购买 nike

只是想确保我理解 @Injectable(providedIn: 'root') 的语义。 在 Angular 6 之前,如果我们从 NPM 导入一个包含服务的模块,我们将在我们的应用程序模块中声明该模块,以便整个应用程序都可以访问该服务。像这样:

    import { SomeNPModule } from '@ngx/SomeNPModule';

@NgModule({
imports: [
BrowserModule,
SomeNPModule
]
})
export class AppModule {}

现在我们可以注入(inject)模块提供的SomeService,因为我们已经导入了模块。在 Angular 6 中,不需要将 SomeNPModule 导入到 AppModule 中,因为我们在服务上使用了 @Injectable(providedIn: 'root)本身,当注释运行时,它会自动使服务在 root 注入(inject)容器中可用吗?

更新

所以我们有了答案,但我认为它是部分完整的,如果我们想要配置服务,这通常是通过服务模块上的 forRoot 方法完成的...正如通过 Router 完成的那样。所以假设我们不想配置服务,我们需要做的就是注入(inject)它,但是如果我们想要配置服务,我们需要遵循 Router 模式。如果我在评论中有任何错误,请纠正我。

最佳答案

当您编写 @Injectable(providedIn: 'root') 时,这意味着整个应用程序的服务都是单例的,您可以在应用程序的任何地方注入(inject)。

当你只想为一个确切的模块创建服务单例时,你需要将你的模块作为参数分配给 providedIn - @Injectable(providedIn: MyModule)

为了使用 @Injectable 修饰服务,唯一需要的其他操作是导入它,构造函数注入(inject)它,仅此而已。无需在 AppModule 中导入它。

关于angular - @Injectable 的语义(providedIn : 'root' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51990188/

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