如何知道角度中的依赖项何时可用

时间:2017-09-26 15:10:37

标签: angularjs

鉴于以下情况,$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

1 个答案:

答案 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以便在您要查找的数据可用时更新服务。

相关问题