如何在angularJS中基于配置文件加载模块

时间:2017-08-02 20:00:27

标签: javascript angularjs

我有几个已定义的模块。我不想将它们全部加载到我的应用程序中。相反,我想基于配置文件加载它们。例如

模块1:

angular.module('section1', [])

单词数:

angular.module('section2', [])

在每个模块中,它都有自己的HTML模板和业务逻辑。然后在app.module.js:

angular.module('app', ['module1', 'module2']);

module1和module2将一起加载。我不想硬编码,相反,我会有一个配置文件,如:

[{'module1': true}, {'module2':false}]

最终,每次启动应用程序时,我都会读取配置文件,然后确定将加载哪些模块以及哪些模块不会加载。在上面的示例中,将加载module1,而模块2将不加载。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你可以manually bootstrap角度js申请。它将帮助您添加条件并决定加载哪个模块

以下是如何以角度进行手动自举。

angular.element(function() {
  if(/* condition */ {
    angular.bootstrap(document, ['module1']);
  } else {
    angular.bootstrap(document, ['module2']);
  }
});

答案 1 :(得分:1)

您可以在定义角度模块之前构建模块依赖关系数组,并将数组作为变量传递。如果您完全控制配置文件及其加载方式,则配置文件可能只是依赖项数组。像这样:

var config = ['module1', 'module2'];
angular.module('app', config);

假设您有多个配置文件,然后为该特定上下文加载所需的配置文件。

如果要将所有模块依赖关系配置放在一个文件中,可以将其格式化为:

var config = {
    'profileA': [ 'module1' ],
    'profileB': [ 'module2' ]
};
var currentProfile = 'profileA';
angular.module('app', config[currentProfile]);

由于它是在定义Angular应用程序之前配置的(因此是自举的),因此Angular不会关心模块依赖性的来源。只要加载了实际模块的.js文件。但是,如果没有浏览器刷新,您将无法更改配置文件。