Angularjs 从包含的模块(config())中的超级模块访问常量
我有一个全局模块“app”,其中包括另外两个模块“app.core”和“app.service”。这是基本设置。在两个子模块内,我可以从两个模块访问常量。但是,我无法访问“app.core”或“app.service”中的“app”中声明的常量 我还使用angular.bootstrap延迟初始化,因为我需要从服务器检索配置。但在收到配置后,我会执行angular.module('app').constant('config',config);所以常数应该定义得很好 最后一点,在'app'模块配置中,我可以访问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'模块配
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
的第一个依赖项加载。这可以通过将依赖关系顺序交换为应用程序
,来证明,因为您会看到一个错误。是的,我在这一点上感到困惑,但多亏了您,现在已经清楚了;)。