2015-02-03 4 views
2

На данный момент мы находимся в процессе создания новой инфраструктуры веб-приложений.angularjs маршрут к контроллерам из разных модулей

Первоначально мы загружаем приборную панель, которая представляет собой верхнюю панель, отображающую зарегистрированного пользователя и набор меню вместе с ним. При нажатии на каждое меню загружается экран (в основном, crud-экраны) в главном разделе. Мы планируем разместить каждый из экранов crud и их компонентов (сервисов, контроллеров и т. Д.) В отдельном модуле, который будет инкапсулировать все экраны друг в друга, так, например, если имеется 78 экранов, на каждом экране будет 78 отдельных модулей , Мы также используем строгание с использованием Requirejs для динамической загрузки этих зависимостей.

Однако возникает проблема с тем, что нам нужно связать меню с каждым из модулей для каждого экрана. Как правило, в приложении с одним модулем это будет сделано следующим образом.

config(function($routeProvider, $locationProvider) { 
    $routeProvider 
    .when('/Book/load', { 
    templateUrl: 'book.html', 
    controller: 'BookController' 
    }) 
    .when('/Screen/load', { 
    templateUrl: 'chapter.html', 
    controller: 'ChapterController' 
    }); 

В том случае, если BookController и ChapterController будут в этом же модуле.

Однако в нашем случае BookController будет в BookModule для экрана книги, и то же самое относится к ChapterController. И маршруты будут в исходном основном модуле, например, AppModule, который загружает панель мониторинга сначала во время запуска.

Как мы можем сказать, например, связать AppModule и маршруты с каждым модулем для каждого экрана (например, в данном случае BookController и ChapterController), имея в виду, что нам нужно динамически загружать модули, когда NEEDED использует requirejs.

(PS: Мы, по существу, сегментирование нашего приложения на основе функции, где функция в нашей системе обычно равно экран)

Также любые предложения по любому другому способу, мы могли бы лучше структуру нашего приложения, включая ответ на выше проблему будет очень ценим.

С уважением, Милинды

+0

Вы можете найти [угловое требование-ленивый] (https://github.com/nikospara/angular-require-lazy) (или некоторые его концепции). –

+0

Лучшей практикой является структурирование ваших угловых файлов с помощью функции FEATURE, что означает, что все контроллеры, службы и другие приложения, принадлежащие вашему Dashboard, должны находиться в одном месте. ИМХО, плохо структурировать ваши файлы так, как вы хотите –

ответ

0

Почему вы имеете конфигурацию маршрута в начальном основном модуле? Это создает ненужную связь между вашими модулями (т. Е. Ваш первоначальный модуль должен знать все возможные маршруты каждого модуля), что приводит к победе над целью перенести ваш код на модули в первую очередь.

Каждый из ваших модулей может иметь собственную конфигурацию маршрута, которая вступает в силу при загрузке модулей. (Последовательное именование может помочь избежать столкновений между маршрутами unrelates модулей)

При настройке routeProvider, можно использовать ленивые механизмы загрузки, используя решимость атрибута маршрутов: ресурсы, упомянутые здесь, будут решены до наступления события routeChange , что позволяет вам ждать разрешения любого обещания или требовать загрузки файла. This blogpost может помочь в этом отношении.

0

С этого момента не существует механизма, насколько мне известно, для динамической загрузки модулей во время выполнения, а затем включения их в приложение AngularJS. Вы можете разбивать свое приложение на 78 отдельных модулей, загружаемых с помощью requirejs, но вам по-прежнему нужен один первичный модуль, который имеет все остальные 78 в качестве зависимостей. Именно этот первичный модуль вы затем настроите все маршруты.

Работает новый маршрутизатор AngularJS, который заимствует у других более гибких маршрутизаторов (т.ui-router и т. д.), что позволит точно такую ​​динамическую загрузку модулей, о которых вы говорите, но насколько я знаю, он будет недоступен до AngularJS 1.4.

Смежные вопросы