2014-02-05 72 views
8

我嘗試使用AngularJS構建模塊化應用程序。我的第一個想法是組中的每個模塊由functionnality用這種文件夾結構:Modularize AngularJS應用程序:一個或多個AngularJS模塊?

/core 
    controllers.js 
    directives.js 
    app.js 
/modules 
    /users 
     controllers.js 
     directives.js 
    /invoices 
     controllers.js 
     directives.js 
    /messages   
     controllers.js 
     directives.js 
    ... 

注意,「核心」文件夾中包含基本功能,將永遠是在應用程序。其他模塊可以獨立添加或刪除。

由於我的應用程序將會很大,我還希望使用延遲加載。我實施了這個解決方案:http://ify.io/lazy-loading-in-angularjs/這對我來說似乎是最簡單的方法。問題是它只爲控制器,服務,指令執行延遲加載......但不適用於AngularJS模塊。

我知道還有另一種方式可以延遲加載Angular模塊(http://blog.getelementsbyidea.com/load-a-module-on-demand-with-angularjs/),但我認爲這太方便了,因爲它使用Angular的核心方法。

我的問題是:是否有意義我的情況下使用,我的每個模塊不同AngularJS模塊,像這樣:

angular.module('core', ['ngRoute', 'users', 'invoices', 'messages']) 
angular.module('users') 
angular.module('invoices') 
angular.module('messages') 

什麼是這種方法的優勢在哪裏? AngularJS模塊是否有用 - 目前 - 僅適用於Angular的第三方模塊?

我在問這個,因爲AngularJS 2.0會支持本地延遲加載。谷歌的MiškoHevery說:「你應該按視圖進行分組,因爲視圖會在不久的將來延遲加載」,並且我們應該在每個應用程序中使用一個模塊,請參閱此處:https://www.youtube.com/watch?v=ZhfUv0spHCY&t=34m19s

對於大型應用程序只使用一個模塊,我的應用程序是這樣的:

angular.module('core', ['ngRoute']); 

然後延遲加載我的控制器,服務和指示基於路線或看法嗎?

回答

1

我們有一個類似的結構(在一個非常大的應用程序),你在這裏提出的,除非沒有控制器,服務等捆綁成單個.js文件。相反,我們只是將我們的擔憂與視圖,服務等全部捆綁在一個模塊中。所以,每一個有意義的組件可能是這樣的:

/my-component 
    - i-do-something.js 
    - a-view.html 
    - a-view-that-is-a-child.html 
    - a-view-ctrl.js 
    - index.js //the thing that creates a module and returns it 
    /tests 
     - i-do-something-spec.js 
     - a-view-ctrl-spec.js 

這是所有捆綁成一個單一的應用程序模塊(命名爲我們的組織)。然後,一個簡單的啓動模塊angular.bootstrap(['app'])是整個事情。 我們用browserify來編譯所有這些東西,到目前爲止效果很好。

相關問題