包括角度配置模块

时间:2015-07-13 14:17:09

标签: javascript angularjs

我无法构建一个存储所有配置数据的Angular模块,然后将其包含在我的主Angular模块中。

这个想法是让系统能够更改配置数据。所以主模块代码和控制器代码是相同的,但配置模块是不同的。

我尝试了许多不同的方法让它发挥作用,但它们都给了我一系列错误。

我的配置模块看起来像这样

(function( ){
    angular.module('favoriteeats.config')
    .constant('GLOBAL_CONFIG', {
        'base_uri': '".url( )."'
    });
});

我的主要(精简)模块看起来像这样。注意我使用托架的刀片模板。

(function( ){   
    var app = angular.module('favoriteeats', ['favoriteeats.config','ngResource'], function($interpolateProvider) {
        $interpolateProvider.startSymbol('<%');
        $interpolateProvider.endSymbol('%>');   
})();

我的控制器看起来像这样。

(function( ){
    var app = angular.module('favoriteeats');
    app.controller('EntrustRolePermissions', function($scope, $controller) {
        angular.extend(this, $controller('BaseController', {$scope: $scope}));
        var vm = this;
        vm.roles = [ ];
        vm.user_roles = [ ];

        vm.updateRoles = function(){
            ret = vm.restApi('role','GET');
            console.log(ret);
        }

        vm.updateRoles( );

    }) //end contoller

})();

当我在头部包含配置模块脚本时,我收到此错误。

&#34;错误:[$ injector:modulerr]由于以下原因,无法实例化模块收藏夹: [$ injector:modulerr]无法实例化模块favoriteeats.config,原因如下: [$ injector:nomod]模块&#39; favoriteeats.config&#39;不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。&#34;

当我在lazying加载JS后在页脚中包含配置模块脚本时,我得到了同样的错误。

如果我将配置模块脚本添加到单独的JS文件中并在主模块js文件之前或之后添加它,我会得到相同的错误。

它似乎工作的唯一方法是,如果我包含在相同的`(function(){&#39;容器作为主模块.IE

(function( ){
    angular.module('favoriteeats.config')
        .constant('GLOBAL_CONFIG', {
            'base_uri': '".url( )."'
        });

    var app = angular.module('favoriteeats', ['favoriteeats.config','ngResource'], function($interpolateProvider) {
    $interpolateProvider.startSymbol('<%');
    $interpolateProvider.endSymbol('%>');   
})();

这是为什么?如何从其他位置提取并包含我的配置脚本!?!?我找不到确定错误的答案。

3 个答案:

答案 0 :(得分:0)

你有一个有缺陷的IIFE。

(function( ){
    angular.module('favoriteeats.config')
    .constant('GLOBAL_CONFIG', {
        'base_uri': '".url( )."'
    });
}); // This does not close the IIFE. 

将其更改为:

(function( ){
    angular.module('favoriteeats.config')
    .constant('GLOBAL_CONFIG', {
        'base_uri': '".url( )."'
    });
}()); // or })();

编辑; 我甚至没有注意到你没有定义你的模块,而是引用它。像@joao和@mithon建议的那样 - 添加一些括号:

angular.module('favoriteeats.config', [])

答案 1 :(得分:0)

您应该通过指示模块的依赖关系(在本例中为空数组)来声明模块,然后您必须执行该函数:

(function( ){
    angular.module('favoriteeats.config', [])
    .constant('GLOBAL_CONFIG', {
        'base_uri': '".url( )."'
    });
})();

答案 2 :(得分:0)

您引用了“favoriteeats.config&#39;模块而不是定义它。如果添加空的依赖项列表,它应该可以工作。

angular.module('favoriteeats.config', [])