Angular中模块配置中的恒定注入错误

时间:2017-02-01 05:59:01

标签: javascript angularjs dependency-injection

问题是我无法从一个模块向另一个模块配置插入常量。

myApp.module.js:

'use strict';

angular.module('myApp', [
    'myApp.base',
    'ui.router',
    'ui.bootstrap',
    'myApp.common'
]);

myApp.config.js

'use strict';

angular
    .module('myApp')
    .constant('appConfig', applicationConfiguration())

function applicationConfiguration() {
    var config = {
        debug: true
    };

    switch (window.location.hostname) {
        case 'www.myapp.net':
            config.apiUrl = 'www.myapp.net/';
            config.publicSiteUrl = "www.myapp-public.net";
            break;
        case 'localhost':
            config.apiUrl = 'http://localhost:61057/';
            config.publicSiteUrl = "http://localhost:57563/";
            break;
    }

    return config;
}

这是我尝试使用它的地方:

'use strict';

angular.module('myApp.base', [
    'myApp'
])
    .config(['$stateProvider','appConfig', function configState($stateProvider, appConfig) {

        $stateProvider
            .state('public', {
                ...
            })
            .state('publicSite', {
                url: appConfig.publicSiteUrl,
                external: true
            });
    }])
    .run(function(){});

当我运行代码时,我继续收到以下错误:

Error: [$injector:modulerr] Failed to instantiate module myApp due to:
[$injector:modulerr] Failed to instantiate module myApp.base due to:
[$injector:unpr] Unknown provider: appConfig

1 个答案:

答案 0 :(得分:1)

我不确切地知道你在做什么! :| (将常量放在应用程序中,而不是基础,并将路由放在基础而不是应用程序,或者不要将它们放在一起以及其他许多问题的原因)
但也许这会解决你的问题。

myApp.module.js:

'use strict';

angular.module('myApp', [
    'ui.bootstrap',
    'myApp.common'
]);

myApp.config.js

'use strict';

angular
    .module('myApp')
    .constant('appConfig', applicationConfiguration)

function applicationConfiguration() {
    var config = {
        debug: true
    };

    switch (window.location.hostname) {
        case 'www.myapp.net':
            config.apiUrl = 'www.myapp.net/';
            config.publicSiteUrl = "www.myapp-public.net";
            break;
        case 'localhost':
            config.apiUrl = 'http://localhost:61057/';
            config.publicSiteUrl = "http://localhost:57563/";
            break;
    }

    return config;
}

使用它:

'use strict';

angular.module('myApp.base', [
    'myApp',
    'ui.router',
])
    .config(['$stateProvider','appConfig', function configState($stateProvider, appConfig) {

        $stateProvider
            .state('public', {
                ...
            })
            .state('publicSite', {
                url: appConfig.publicSiteUrl,
                external: true
            });
    }])
    .run(function(){});