16

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

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

@Injectable({providedIn: 'any'})
class UsefulService {
}
4

3 回答 3

15

rootanyas per官方文档的区别:

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

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

  • any: 接收解析的 NgModule 注入器。

更多细节请参考这篇文章

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

于 2020-01-24T08:04:48.043 回答
5

angular 9 引入了可注入装饰器的新选项 ProvidedIn 除了之前的root和模块选项外,现在我们还有两个额外的选项 platformany

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

any — 在注入令牌的每个模块(包括惰性模块)中提供唯一的实例

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

详细了解 Angular 的“根”和“任何”提供程序范围

于 2020-02-06T22:44:16.103 回答
5

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

对于谷歌发送到这里的任何人,

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

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

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

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

图表

于 2021-10-02T11:47:04.837 回答