从包含模块中的超级模块访问常量(config())

时间:2015-02-02 20:29:28

标签: angularjs angularjs-bootstrap

我有一个全球模块' app'其中包括另外两个模块' app.core'和' app.service'。这是基本设置。在两个子模块内部,我可以从两个模块中访问常量。但是我无法访问' app'中声明的常量。在app.core'内或者' app.service'。

此外,我使用angular.bootstrap来延迟初始化,因为我需要从服务器检索配置。但收到配置后,我做了angular.module(' app')。常量(' config',config);所以应该很好地定义常数..

LAst点,在' app'内module config我可以访问配置常量。

有什么想法吗?

'应用'模块常量声明

angular.module('app',[
    'app.core',
    'app.service'
])
    .module('app')
    .constant('foo', 'foo')

' app.core'常数

    angular
    .module('app.core')
    .constant('core', 'core');

在app.service'我可以获得核心常数

    angular.module('app.services',[]).config(function($injector){
        console.log($injector.get('core'));
    })

但我无法检索应用程序'恒定

angular.module('app.services',[]).config(function($injector){
        console.log($injector.get('foo'));
    })

会崩溃

1 个答案:

答案 0 :(得分:3)

在这两种配置中,您尝试访问在单独模块中定义的常量,但之后不将该模块定义为依赖项。例如,当{em>首先需要 app.services的模块上定义foo时,foo可以app.services访问{1}}吗? / p>

core app.services可用app的原因是因为您在定义角度恰好已加载app.core的{​​{1}}时已按此顺序列出了依赖关系在app.services之前。但是,定义的依赖关系的顺序无关紧要。

为了纠正这个问题,你应该考虑重构你的模块,以便没有固有的循环依赖。例如,考虑将配置本身作为模块并将其注入依赖服务:

angular.module('app', ['app.core', 'app.services'])

angular.module('app.config', [])
  .constant('foo', 'foo')

angular.module('app.core', ['app.config'])
  .config(function(foo) {})

angular.module('app.services', ['app.config'])
  .config(function(foo) {})

另请注意,使用注入器获取常量是不必要的,因为它们可以在配置阶段直接注入。