鉴于以下情况,$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
}
})
这可能吗?
related => $location from $exceptionHandler - dependency conflict
答案 0 :(得分:1)
通过正常角度功能(工厂,服务,控制器等)注册的所有注射剂都可以在引导时立即使用。 $rootScope
未正常注册。它是在app bootstraps之后提供的。由于$exceptionHandler
已立即实例化,$rootScope
尚未提供。
解决循环依赖性错误的最佳方法是打破循环。让您的$exceptionHandler
依赖于您构建的自定义服务。在注入.run()
的{{1}}块中配置新服务。
$rootScope
注意: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
以便在您要查找的数据可用时更新服务。