2017-03-22 35 views
2

是否有可能在我的angular 2應用程序運行時中從不同的服務器加載不同的模塊,如果是這樣,我該如何實現?在運行時從不同服務器加載模塊

我想讓我的應用程序從孤立服務器(A,B,C)的整個應用程序中加載不同的組件,以便它們可以從主應用程序和任何包含在A ,B或C將不會被加載。顯示在底部的3個模塊將具有組件,但主應用程序會在其中聲明它應該加載組件的HTML。

Overview

UPDATE

通過路由延遲加載是不是我要找的,在3個模塊應該有他們自己的倉庫完全獨立的模塊,項目,主機託管,恩茨。

+0

您可以嘗試使用SystemJS或Webpack'require.ensure'動態加載ES6模塊。 A2通過懶加載的路由處理這個,沒有其他辦法。 '不是我要找的'表明你沒有正確設計應用程序來處理路由器的這種情況。沒有很好的推理,它看起來更像是XY問題,而不是其他問題。 – estus

+0

@estus,你可以詳細說明一下如何使用該webpack函數工作嗎? 在angular 1中,我可以通過從腳本A,B,C的主應用中找到模塊並以這種方式聲明控制器,指令和服務來解決此問題。 – Myth1c

+0

['import'](https://webpack.js.org/guides/code-splitting-import/)可能會做得更好。 '(Promise.all([import('modA')。catch(noop),import('modB')。catch(noop)])。then(([modA,modB])=> .... @ NgModule( ... import:[modA,modB])...)class MainMod {}'。同樣,這看起來像是設計問題,即使有可能,這種方法也可能有許多問題。正確的做法是組件路由器和懶惰路由。 – estus

回答

3

有點晚了,但您可以在路線中使用延遲加載機制來完成您想要的操作。 Solution: load independently compiled Webpack 2 bundles dynamically

在你定義在loadchildren部分回調路線:

const appRoutes: Routes = [ 
    {path: '', component: MainComponent}, 
    {path: 'modulea', loadchildren: loadModuleA} 
] 

的loadModuleA方法看起來像如何從另一個源加載的WebPack模塊

該文章指出:

export function loadModuleA() { 

    return new Promise((resolve, reject) => { 

     // the method from the article 
     loadPlugin('path/to/server/of/moduleA', (exports) => { 
      // The Submodule must export ModuleA 
      resolve(exports.ModuleA); 
     }); 

    }); 

} 
相關問題