1

如果我想在一个模块中隔离服务,我应该为模块创建一个根组件,并providers在这个组件上使用(如所述文档)。

如果我providers在模块上使用,服务将成为应用程序级别。因此,这是提供应用程序级服务的一种方式(如示例中所做的那样

但是,接下来,文档说

不要在共享模块中指定应用程序范围的单例提供程序。导入该共享模块的延迟加载模块将制作自己的服务副本。

所以,我们不应该使用providers模块来提供共享服务。那么,我们应该使用什么?应用模块providers?我们应该在 AppModule 中提供所有共享服务吗?什么时候应该使用providers功能模块?

看起来,模块提供程序是共享的,但您不应该将它们用作共享。怎么回事?

4

2 回答 2

2

不要在共享模块中指定应用程序范围的单例提供程序。导入该共享模块的延迟加载模块将制作自己的服务副本。

这仅适用于延迟加载的模块。非延迟加载模块中的提供程序始终添加到应用程序根范围。

延迟加载的模块有自己的根范围,因为根注入器以后不能修改(在它被初始化之后)。

要确保在根级别提供所有服务,请实现该forRoot()方法并在那里提供服务。AppModule然后在with处导入服务imports: [MyModule.forRoot()]

于 2017-01-29T21:00:18.827 回答
1

这是 Angular问题仍然是开放的。

于 2017-02-11T22:04:30.937 回答