【发布时间】:2017-09-26 23:53:42
【问题描述】:
鉴于以下情况,$injector.get 将失败,因为 $rootScope 不可用。
app.factory('$exceptionHandler', ['$injector', $injector => {
const $rootScope = $injector.get('$rootScope')
return (exception, cause) => {
// code
}
})
在研究中,我不断遇到这个问题,因为它在运行时解决(当调用内部函数时)。
app.factory('$exceptionHandler', ['$injector', $injector => {
return (exception, cause) => {
const $rootScope = $injector.get('$rootScope')
// code
}
})
我想以某种方式知道何时可以解决依赖关系。比如:
app.factory('$exceptionHandler', ['$injector', $injector => {
$injector.illLetYouKnowWhenWeCanDoStuff().then(() => {
const $rootScope = $injector.get('$rootScope')
})
return (exception, cause) => {
// code
}
})
这可能吗?
相关 => $location from $exceptionHandler - dependency conflict
【问题讨论】:
-
为什么要注入注入器,而不是一开始就注入 $rootScope?注入器会找出依赖关系,从而创建 $rootScope 并在创建 exceptionHandler 之前注入它。另外,请注意
$前缀正是用于区分角度服务和您自己的服务。所以你不应该在你的服务前面加上$。 -
@JBNizet 阅读了我在底部链接的问答,您指的是我的什么服务?本地 $rootScope?
-
@JBNizet $injector 是第二个示例工作所必需的(以及我当前的解决方法),但在第一个示例中可能无关紧要(无论哪种方式都存在相同的错误)
-
通常情况下,一旦应用程序启动,所有可注射的东西都可用。新服务通常不会在运行时添加。也许如果你在更高层次上解释你想要达到的目标,有人可以提供帮助。
-
@JCFord 当然。我只需要在这个工厂内从 $rootScope 获取一些东西。问题是它最初没有准备好,但我可以在一段时间后得到它(即内部函数)
标签: angularjs