У меня есть приложение со сложной компоновкой, в котором пользователь может размещать (перетаскивать / оставлять) виджеты (выбирая из предопределенного набора из 100+ виджетов), где каждый виджет представляет собой настраиваемую реализацию, которая отображает набор данных (извлекаемых с помощью вызова REST) определенным образом. Я прочитал массу сообщений в блогах, вопросов о stackoverflow и официальных документов AngularJS, но я не могу понять, как мне разработать свое приложение, чтобы удовлетворить его требования. Глядя на демонстрационные приложения, есть один модуль (ng-app), и при его создании в файле .js зависимые модули объявляются как его зависимости, однако у меня большой набор виджетов, и почему-то не рекомендуется описывать их все там. Мне нужно предложение по следующим вопросам:
- Как мне разработать свое приложение и виджеты - должен ли я иметь отдельный модуль AngularJS или каждый виджет должен быть директивой для основного модуля?
- Если я проектирую свой виджет в виде директив, есть ли способ определить зависимость внутри директивы. То есть сказать, что моя директива использует в своей реализации ng-calender?
- Если я проектирую каждый виджет как отдельный модуль, есть ли способ динамически добавить модуль виджета в качестве зависимости от основного модуля?
- Как мне разработать контроллеры - возможно, один контроллер на виджет?
- Как мне разделить состояние (область действия), если у меня есть несколько виджетов одного типа в представлении?
- Есть ли лучшие практики для разработки многоразовых виджетов с помощью AngularJS?
РЕДАКТИРОВАТЬ
Полезные ссылки:
- ocLazyLoad - отличная библиотека для ленивой загрузки для AngularJS
- Seed project - модули + ленивая загрузка при изменении маршрута (ES6, systemjs, ocLazyLoad)
- Ленивая загрузка в AngularJS
- Динамическая загрузка контроллеров и представлений с помощью AngularJS и RequireJS
- Загрузка компонентов AngularJS с помощью RequireJS после начальной загрузки приложения
- Демо-проект о ленивой загрузке ресурсов AngularJS на GitHub
- Проект "Загрузить по запросу"
- Внедрить модуль динамически, только если требуется
- Еще одна ленивая загрузка в статье об Angular
- Организация кода в больших приложениях AngularJS и JavaScript