【问题标题】:How can I determine if an angular factory/service has been previously injected如何确定以前是否注入了角度工厂/服务
【发布时间】:2015-04-12 07:57:58
【问题描述】:

我有一个角工厂,它在注入其他对象时执行一些任务。在某些情况下,我使用 $injector.get() 来注入工厂,而在其他情况下,它是通过控制器、服务等的函数声明来注入的。

我想确定以前是否注入过工厂。我可以在 angular 模块上实现一个布尔值,然后在工厂初始化期间触发标志,但这似乎很笨重。

在 Angular 模块的生命周期中是否存在先前注入的对象列表?

想法?

【问题讨论】:

  • Angular 不会注入工厂。 Angular 注入了一个由工厂函数创建的服务实例。所以,我不明白你所说的“注射时执行任务”是什么意思。你能举例说明你想要达到的目标吗?
  • 我很好奇。这些知识的应用是什么?换句话说,你为什么需要知道?
  • @Brett,你指的是为什么需要一个例子吗?为了防止像XY问题这样的事情。为了更好地理解这个问题。例如,工厂函数在注入时运行,并且只运行一次。最简单的事情就是在那里设置一个变量。
  • @NewDev 我了解实现,并且它仅在内存中实例化一次。我不需要一个例子。我不明白的是为什么他会关心它是否已经被实例化。目的是什么?基本上,我的问题与你的有关。他可能不是指“工厂”。
  • @Brett,啊,没关系...我以为你的意思是为什么 需要知道。是的,一个例子很重要——这也是我的评论。

标签: javascript angularjs dependency-injection


【解决方案1】:

您可以尝试使用$injector service
虽然无法具体查看是否已注入且当前正在使用,但可以通过以下方式查看服务是否存在:

$injector.has('serviceName') 

【讨论】:

  • Angular 了解工厂/服务这一事实无助于了解是否已经创建了实例。我已经测试过 $injector.has 并且无论工厂/服务是否已被实例化,它总是返回 true。
  • 老鼠...我希望这是injector.has 的行为,但不,@GregGrater 是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多