providedIn any 和 root 和有什么不一样

mal*_*awi 10 typescript angular-services angular angular-dependency-injection

在 Angular 9 中,可注入装饰器选项providedIn有一个名为any. root和 和有any什么区别?

在我使用的情况下,服务是否被视为单例any

@Injectable({providedIn: 'any'})
class UsefulService {
}
Run Code Online (Sandbox Code Playgroud)

max*_*sam 16

我认为提供的答案并不是很清楚。但是,@jkonst、@schr\xc3\xb6dingc\xc3\xb6der 和 @Bruce 在评论中是正确的。

\n

对于任何由 Google 发送至此处的邮件,

\n

any does\t 在每个模块中提供唯一的实例。(应该说只在每个共享模块中)

\n

这意味着每个注入范围中有一个实例

\n

来自https://angular.io/guide/providers

\n
\n

使用providedIn:\'any\',所有急切加载的模块共享一个单例实例;但是,延迟加载的模块每个都有自己独特的实例,如下图所示。

\n
\n

图表

\n


小智 13

rootany根据官方文档的区别:

  • root :大多数应用程序中的应用程序级注入器。

  • platform :页面上所有应用程序共享的特殊单例平台注入器。

  • any :接收分辨率的 NgModule 注入器。

有关更多详细信息,请参阅这篇文章

在我使用的情况下,服务是否被视为单例any?-没有

  • 在每个模块中我使用具有“any”选项的服务,我将拥有该服务的一个新实例,这样说是否正确 (4认同)
  • 似乎引用的文章指出“任何”“所有急切加载的模块共享根模块注入器提供的一个实例”。据推测,这意味着只有惰性模块才会拥有其新实例。 (2认同)
  • 说在每个模块中都有该服务的新实例是不正确的。急切加载的模块共享一个实例。这也在角度文档中进行了解释:https://angular.io/guide/providers (2认同)

mal*_*awi 10

Angular 9 为可注入装饰器引入了新选项,除了之前的选项root和模块选项之外,现在我们还有两个附加选项\n platformany

\n\n
\n

root \xe2\x80\x94 这告诉 Angular 在应用程序根级别提供服务,并且该服务将被创建一次单例服务\n ),并在注入令牌的每个模块中提供相同的实例。

\n\n

any \xe2\x80\x94在注入令牌的每个模块(包括惰性\n模块)中提供唯一的实例。

\n\n

platform \xe2\x80\x94 指定providedIn: \'platform\' 使该服务在由页面上的所有应用程序共享的特殊单例平台注入器中可用。

\n
\n\n

详细了解 Angular 的“root”和“any”提供程序范围

\n

  • 根据 Angular 文档,“any”将仅在惰性模块中提供唯一的实例,但所有急切加载的模块将共享一个单例实例。那么“any”怎么可能在每个模块中提供唯一的实例呢? (5认同)
  • @布鲁斯,你是对的。它是每个模块注入器范围的一个实例。基本上每个运行时包一个实例。 (2认同)