2017-01-15 35 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

它可能只是爲了方便與'

相關問題