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

Ole*_*Ole 4 typescript angular-providers progressive-web-apps angular angular-dependency-injection

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

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

    @NgModule({
    imports: [
        BrowserModule,
        SomeNPModule
    ]
    })
    export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

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

更新

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

Sur*_*yan 8

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

如果要仅为精确模块创建服务单例,则需要将模块作为参数分配给providedIn-@Injectable(providedIn: MyModule)

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