8

Вопрос по lazy-loading, angularjs, modularity – Модульное приложение AngularJS: один или несколько модулей 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
     ...

Обратите внимание, что папка «core» содержит базовые функции, которые всегда будут в приложении. Другие модули можно добавлять или удалять самостоятельно.

Поскольку мое приложение будет большим, я также хочу использовать отложенную загрузку. Я реализовал это решение:http://ify.io/lazy-loading-in-angularjs/ что мне кажется на самом деле самый простой способ. Проблема в том, что он выполняет ленивую загрузку только для контроллеров, служб, директив ... но не для модулей AngularJS.

Я знаю, есть еще один способ, который позволяет лениво загружать угловые модули (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 будет поддерживать изначально ленивую загрузку. Мишко Хевери из Google говорит: «[вам] следует сгруппировать по представлениям, так как представления будут загружены с отложенной загрузкой в ​​ближайшем будущем», и что мы должны использовать один модуль для каждого приложения, смотрите здесьhttps://www.youtube.com/watch?v=ZhfUv0spHCY&t=34m19s

Правильно ли для большого приложения использовать один модуль для моего приложения, например так:

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

А потом лениво загружать мои контроллеры, сервисы и директивы на основе маршрута или вида?

1 ответ
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 чтобы собрать все эти вещи, и до сих пор это работало хорошо.

Похожие вопросы