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

Angularjs 从包含的模块(config())中的超级模块访问常量,angularjs,angularjs-bootstrap,Angularjs,Angularjs Bootstrap,我有一个全局模块“app”,其中包括另外两个模块“app.core”和“app.service”。这是基本设置。在两个子模块内,我可以从两个模块访问常量。但是,我无法访问“app.core”或“app.service”中的“app”中声明的常量 我还使用angular.bootstrap延迟初始化,因为我需要从服务器检索配置。但在收到配置后,我会执行angular.module('app').constant('config',config);所以常数应该定义得很好 最后一点,在'app'模块配

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

我还使用angular.bootstrap延迟初始化,因为我需要从服务器检索配置。但在收到配置后,我会执行angular.module('app').constant('config',config);所以常数应该定义得很好

最后一点,在'app'模块配置中,我可以访问config常量

有什么想法吗

“应用程序”模块常量声明

angular.module('app',[
    'app.core',
    'app.service'
])
    .module('app')
    .constant('foo', 'foo')
“app.core”常量

    angular
    .module('app.core')
    .constant('core', 'core');
在“应用程序服务”中,我可以获得核心常数

    angular.module('app.services',[]).config(function($injector){
        console.log($injector.get('core'));
    })
但我无法检索“app”常量

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

将崩溃

在两种配置中,您试图访问在单独模块中定义的常量,但未将该模块定义为依赖项。例如,当在首先需要
app.services
的模块上定义
foo
时,
app.services
如何访问
foo

尽管如此,
app.services
仍然可以使用
core
的原因是,在定义
app
时,您以这样的顺序列出了依赖项,而angular恰好在
app.services
之前加载了
app.core
。但是,定义的依赖项的顺序应该无关紧要

为了纠正这一点,你应该考虑重构你的模块,这样就不会有内在的循环依赖性。例如,考虑将配置本身配置为一个模块,并将其注入依赖服务:

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) {})

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

angular.module('app.services',[]).config(function($injector,'foo'){console.log($injector.get('foo');}),也许吧?如果我没记错的话,$injector是一种直接访问注入组件的方法,而不是在函数声明中声明它。因此,这是同样的方式,并没有工作不幸。顺便说一句,我不明白你真正的意思,你是在函数声明中写字符串吗?对不起,它应该没有单引号。我认为scarlz的答案是正确的。非常感谢,如果我使用另一个模块进行配置,它会工作得很好。不过我还有一个问题,我现在想知道为什么app.service可以访问app.Core常量,反之亦然?我的意思是它们没有相互包含,对吗?这就是我第二段的意思-
app.core
常量是可用的,因为它已经作为
app
的第一个依赖项加载。这可以通过将依赖关系顺序交换为
应用程序
,来证明,因为您会看到一个错误。是的,我在这一点上感到困惑,但多亏了您,现在已经清楚了;)。