angular.injector在每次调用时返回新的服务实例

angular.injector returns new instance of service on every call

本文关键字:返回 服务 实例 调用 injector angular      更新时间:2024-01-10

我创建了一个简单的plunk来演示这个问题。

我需要从外面叫个服务。

当我使用时

angular.injector(['ng', 'MyModule']).get('MyService')

每次调用它时,我似乎都会得到一个新实例,或者至少表现为这样。在plunk中,注意"Increment"按钮是如何调用服务的同一实例的,而不是"Call Via Injector"的工作方式。

我已经敲了好几个小时的头,尝试了各种各样的东西,读了很多明显相关的帖子,但都无济于事。感谢您的帮助。

更改

angular.injector(['ng', 'MyModule']).get('MyService')

angular.element('[ng-app]').injector().get('MyService').inc();

第一个创建了一个新注入器的实例。angular中的每个注射器都有自己的服务和工厂实例。第二个获取注入器的现有实例。

此外,要使用angular.element选择DOM元素,需要包含jQuery。这是修改后的plunk。

这种行为的原因是,仅仅因为您将callViaInjector按钮放在了ng应用程序之外,就无法获得作用域的Injector实例。

尽管服务在角度上是单例的,但它们只是特定范围的单例。

请注意,如果您将callViaInjector放置在ng应用程序中,您将看到它的行为相应。