Javascript 角度单态服务

Javascript 角度单态服务,javascript,angular,dependency-injection,Javascript,Angular,Dependency Injection,根据我的理解,在“root”中使用providedIn与将您的提供者添加到模块的providers数组中的唯一区别是用于树抖动。当前,如果我在“root”中添加providedIn,我的应用程序可以正常工作,但是如果我删除它并将其添加到模块的providers数组中,我会得到StaticInjectorError,说它找不到提供程序。有没有人看到这一点,或者了解为什么会发生这种情况?从文档来看,我认为将其添加到提供者数组中应该可以使其正常工作,错误是不言自明的。如果您在“root”中提供了,那么

根据我的理解,在“root”中使用
providedIn与将您的提供者添加到模块的
providers
数组中的唯一区别是用于树抖动。当前,如果我在“root”中添加
providedIn,我的应用程序可以正常工作,但是如果我删除它并将其添加到模块的providers数组中,我会得到
StaticInjectorError
,说它找不到提供程序。有没有人看到这一点,或者了解为什么会发生这种情况?从文档来看,我认为将其添加到提供者数组中应该可以使其正常工作,错误是不言自明的。如果您在“root”中提供了
,那么您的服务将在RootInjector上注册。因此,它基本上可以在整个应用程序中使用,而无需手动将其添加到要使用此服务的每个模块的
提供程序
数组中

但是,现在您已经从
@Injectable
装饰器中删除了
providedIn:'root'
,它将仅对您将其添加到这些模块的
提供程序
数组中的模块可用。或者,对于正在导入已将服务添加到
提供者
阵列的模块,它将可用

这里有一个帮助你更好地理解这一点的方法

仅描述一下:

  • 我有三个模块:
    AppModule
    NewModule
    ,和
    NotImportedModule
  • 我将使用
    NewModule
    中编写的服务和
    AppModule
    AppComponent
    中的
    NotImportedModule
  • NewModule
    SampleService
    被添加到
    提供的
    NewModule
    数组中,而
    NewModule
    被添加到
    AppModule
    导入
    数组中。这就是为什么我能够在
    AppComponent
    中使用
    SampleService
  • NotImportedModule
    未添加到
    AppModule
    imports
    数组中,但
    另一个服务
    在“root”中提供。因此,我可以在
    AppModule
    中使用它
  • 这意味着
    另一项服务可以在整个应用程序中使用,因为它是在RootInjector上注册的,因为我们在其上使用了
    中提供的:'root'

    但是由于
    SampleService
    不是在“root”中提供的,而是添加到
    NewModule
    providers
    数组中,以便在
    AppModule
    中使用,我们必须将
    NewModule
    添加到
    AppModule
    imports
    数组中


    希望这个示例更有意义。

    您需要提供一些代码,或者更好的是提供一个
    stackblitz
    示例。。。