Благодаря большой статье от Dan Wahlin мне удалось реализовать ленивую загрузку контроллеров и служб Angular. Тем не менее, похоже, нет чистого пути к ленивым независимым от нагрузки модулям.
Чтобы лучше объяснить мой вопрос, предположим, что у меня приложение будет структурой, как показано ниже, без RequireJS:
// Create independent module 'dataServices' module with 'Pictures' object
angular.module("dataServices", []).factory("Pictures", function (...) {...});
// Create 'webapp' ng-app, with dependency to 'dataServices', defining controllers
angular.module("webapp", ['dataServices'])
.controller("View1Controller", function (...) {...})
.controller("View2Controller", function (...) {...});
Вот пример приложения с RequireJS в Plunker:
http://plnkr.co/aiarzVpMJchYPjFRrkwn
Ядро проблемы заключается в том, что Angular не позволяет добавлять зависимость к ng-app
после создания экземпляра. В результате мое решение заключается в использовании angular.injector
для извлечения экземпляра объекта Picture
, который будет использоваться в моем View2Controller
. См. js/scripts/controllers/ctrl2.js
файл.
Это создает для меня 2 проблемы:
- Введенные службы выполняются за пределами Angular, и поэтому весь асинхронный вызов должен заканчиваться на $scope. $apply()
- Мессиальный код, в котором некоторый объект может быть введен с использованием стандартного синтаксиса Angular, в то время как другие требуют явного использования инжектора.
Кто-нибудь из вас понял, как ленивый независимый от нагрузки модуль с использованием RequireJS и каким-то образом подключить этот модуль к Angular, чтобы можно было использовать обычный синтаксис зависимостей Angular?
Примечание:
Речь идет о ленивой загрузке независимого модуля. Одним из простых решений для этого конкретного примера является создание объекта "Картинки" с использованием кэшированных поставщиков $во время ng-app.config
, но это не то, что я ищу. Я ищу решение, которое работает с сторонним модулем, например angular-resource
.