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