angularjs – 如何以角度创建可插拔应用程序?

我想创建一个应用程序,它可以分为多个模块和自己的路由和所有.用户可以从应用程序主模块打开和关闭这些模块.

>我是否必须加载所有模块并且基于用户是否已订阅而不可用.我认为它会减慢应用程序负载,因为加载所有模块代码并在应用程序引导时注入.
>这个问题有其他替代方案吗?

应为主模块提供已启用模块的列表:
var enabledModules = [...];

angular.module('app',['thirdParty','app.common'].concat(enabledModules));

显然,enabledModules数组不能正常加载$http,因为此时应用程序没有自举.可以使用XHR或服务器端模板来定义它.

或者,可以使用单独的应用程序来加载先决条件.由于使用DI,可以对其进行全面测试.

angular.module('app','app.common']);

angular.module('appInitializer',[])
.factory('loader',($http) => {
  return $http.get('enabled-modules').then((result) => result.data);
})
.factory('initializer',(loader,$document) => {
  return loader.then((enabledModules) => {
    $document.ready(() => {
      angular.bootstrap($document.find('body'),['app'].concat(enabledModules));
    });
  });
});

angular.injector(['ng','appInitializer'])
.get('initializer')
.catch((err) => console.error(err));

相关文章

AngularJS 是一个JavaScript 框架。它可通过 注:建议把脚本放在 元素的底部。这会提高网页加载速度,因...
angluarjs中页面初始化的时候会出现语法{{}}在页面中问题,也即是页面闪烁问题。出现这个的原因是:由于...
AngularJS 通过被称为指令的新属性来扩展 HTML。AngularJS 指令AngularJS 指令是扩展的 HTML 属性,带有...
AngularJS 使用表达式把数据绑定到 HTML。AngularJS 表达式AngularJS 表达式写在双大括号内:{{ expres...
ng-repeat 指令可以完美的显示表格。在表格中显示数据 {{ x.Name }} {{ x.Country }} 使用 CSS 样式为了...
$http是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。读取 JSON 文件下是存储在web服务器上...