在另一个namespace.module.config中注入名称空间常量

时间:2014-09-16 09:22:14

标签: angularjs

我将模块组织与命名空间一起使用。每个模块都在.config中进行路由。但是我无法注入来自另一个模块(主要模块)的常量。

我的常量CRM.Config包含所有项目配置,例如URL,api key ......此常量位于app.main内。我无法在app.<any module name here>中注入它。

一些代码:

app.js

var app = {};

app.main = angular.module('CRM', [
    // Tools
    'ngRoute',
    'oc.lazyLoad',
    'satellizer',

    // Modules
    'CRM.Navbar',
    'CRM.Auth'
]);

config.js(由Gulp生成)

angular.module('CRM')
    .constant('CRM.Config', {
    "project": {
        "env": "dev",
        "title": "CRM",
        "url": "http://..."
    },
    "oauth": {
        "client_id": "...",
        "redirect_uri": "..."
    },
    "api": {
        "endpoint": "http://..."
    }
});

现在在另一个模块中,例如 auth.js

app.auth = angular.module('CRM.Auth', ['ngRoute', 'oc.lazyLoad']);

app.auth.config(['$routeProvider', '$authProvider', 'CRM.Config', function ($routeProvider, $authProvider, config) {

    // Throws an error cause of 'CRM.Config':
    // Failed to instantiate module CRM due to: Error: [$injector:modulerr]...

    // Routing here...

    // HERE I WANT TO PUT MY CONFIG (NOT HARD CODED VALUES)
    $authProvider.google({
        url: 'http://...',
        clientId: '...',
        redirectUri: 'http://...'
    });

}]);

我听说你只能在.config()中注入提供者和常量。那我在哪里错了?如果不清楚,请告诉我。

解答:

angular.module('CRM.Config', [])
    .constant('config', {
    "project": {
        "env": "dev",
        "title": "CRM",
        "url": "http://..."
    },
    "oauth": {
        "client_id": "...",
        "redirect_uri": "..."
    },
    "api": {
        "endpoint": "http://..."
    }
});

app.auth.config(['$routeProvider', '$authProvider', 'config', function ($routeProvider, $authProvider, config) {

}]);

2 个答案:

答案 0 :(得分:0)

您是否忘记在CRM模块定义中要求CRM.Auth模块,如此

app.auth = angular.module('CRM.Auth', ['ngRoute', 'oc.lazyLoad', 'CRM'])

这是有效的:

angular.module('foo', [])

  .constant('config', {
    val: 1
  })

angular.module('bar', ['foo'])

  .config(function(config) {
    console.log(config)
  })

请注意,我测试时ng-app的值为bar

请参阅此Plunk

答案 1 :(得分:0)

问题是依赖模块的构造顺序。如果模块CRM依赖于模块CRM.Auth,则意味着CRM.Auth将在 CRM之前实例化。只有在CRM构建后CRM.Config才可用。当然,您仍然可以在任何模块的应用程序生命周期的运行阶段使用CRM.Config

请参阅此plunk进行演示。