我有一个全球模块' 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'));
})
会崩溃
答案 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) {})
另请注意,使用注入器获取常量是不必要的,因为它们可以在配置阶段直接注入。