繁体   English   中英

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

[英]The semantics of @Injectable(providedIn: 'root')?

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

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

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

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

更新

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

当您编写@Injectable(providedIn: 'root')这意味着整个应用程序的服务处于单一状态,您可以在应用程序的任何位置注入。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM