首页 > 解决方案 > @Injectable(providedIn: 'root') 的语义?

问题描述

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

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

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

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

更新

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

标签: angulartypescriptprogressive-web-appsangular-providersangular-dependency-injection

解决方案


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

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

使用装饰服务所需的唯一其他操作@Injectable是导入它并构造函数注入它,仅此而已。无需在AppModule.


推荐阅读