2017-01-15 36 views
1

我想创建一个应用程序,它可以分成多个模块,并具有自己的路由和全部模块。用户可以从应用程序主模块打开和关闭这些模块。如何在角度创建可插拔应用程序?

  1. 我是否必须加载所有的模块,并基于用户是否订阅了它。我认为它会减慢应用程序负载,因为加载了所有模块代码并在应用程序引导时注入。
  2. 这个问题还有其他的选择吗?

回答

1

启用模块的列表应该被提供用于主模块:

var enabledModules = [...]; 

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

显然,enabledModules阵列不能正常地加载有$http,由于应用程序未在这一点自举。可以使用XHR或服务器端模板来定义它。

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

angular.module('app', ['thirdParty', '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)); 
+0

谢谢,我想我必须创建一个服务器端的登录页面,它将验证用户和在此基础上,我将创造出具有根据应用程序的正确依赖关系一个dyanamic的index.html和app.js给用户。 –

+0

它可能只是为了方便与'

相关问题