Angularjs 如何知道依赖项何时可用
鉴于以下情况,Angularjs 如何知道依赖项何时可用,angularjs,Angularjs,鉴于以下情况,$injector.get将失败,因为$rootScope不可用 app.factory('$exceptionHandler', ['$injector', $injector => { const $rootScope = $injector.get('$rootScope') return (exception, cause) => { // code } }) 在研究过程中,我不断遇到这个问题,它在运行时(当调用内部函数时)被解析时起作用
$injector.get
将失败,因为$rootScope
不可用
app.factory('$exceptionHandler', ['$injector', $injector => {
const $rootScope = $injector.get('$rootScope')
return (exception, cause) => {
// code
}
})
在研究过程中,我不断遇到这个问题,它在运行时(当调用内部函数时)被解析时起作用
我想知道的是我什么时候可以解决依赖关系。比如:
app.factory('$exceptionHandler', ['$injector', $injector => {
$injector.illLetYouKnowWhenWeCanDoStuff().then(() => {
const $rootScope = $injector.get('$rootScope')
})
return (exception, cause) => {
// code
}
})
这可能吗
相关=>
所有通过正常角度功能(工厂、服务、控制器等)注册的注射剂都可以立即在bootstrap上使用<代码>$rootScope未正常注册。它是在应用程序引导后提供的。由于
$exceptionHandler
已立即实例化,$rootScope
尚不可用
绕过循环依赖错误的最佳方法是打破循环。让您的$exceptionHandler
依赖于您构建的自定义服务。在注入$rootScope
的.run()
块中配置该新服务
app.factory('$exceptionHandler', ['myExceptionHandlingConfig', function(myExceptionHandlingConfig) {
return function(exception, cause) {
//do exceptional stuff
}
}]);
app.factory('myExceptionHandlingConfig', function() {
return {};
});
app.run(['$rootScope', 'myExceptionHandlingConfig', function($rootScope, myExceptionHandlingConfig){
myExceptionHandlingConfig.someProperty = $rootScope.something;
}]);
注意:
$rootScope
在引导时将非常空,因此您可能需要设置一个$watch
,以便在您查找的任何数据可用时更新服务。为什么要注入器,而不是一开始就注入$rootScope?注入器将找出依赖项,从而创建$rootScope并在创建exceptionHandler之前注入它。另外,请注意,$
前缀正好用于区分角度服务和您自己的服务。所以你不应该在你的服务前面加上$
@jbnize。不要阅读我在底部链接的问答,你指的是我的什么服务?本地$rootScope?@JBNizet$injector是第二个示例(以及我当前的解决方案)工作所必需的,但在第一个示例中它可能不相关(无论哪种方式都是相同的错误)。通常,一旦应用程序启动,所有将可用的注入程序都可用。新服务通常不会在运行时添加。也许,如果你能从更高的层面解释你想要达到的目标,有人会帮助你。@JCFord当然。我只需要从工厂里的$rootScope那里得到一些东西。问题是它最初还没有准备好,但我可以在一段时间后得到它(即内部功能)
app.factory('$exceptionHandler', ['$injector', $injector => {
const $rootScope = $injector.get('$rootScope')
return (exception, cause) => {
// code
}
})