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

Access constants from super module within included modules (config())

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

中的 'app' 中声明的常量

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

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

有什么想法吗?

'app' 模块常量声明

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'));
    })

但我无法检索 'app' 常量

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

会崩溃

在这两种配置中,您都试图访问在单独模块中定义的常量,但没有将该模块定义为依赖项。例如,当 foo 定义在第一个 需要 app.services 的模块上时,app.services 如何访问 foo地点?

尽管如此,core 仍可用于 app.services 的原因是因为您在定义 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) {})

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