Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lazy loading AngularJS modules with RequireJS

Tags:

Thanks to the great article from Dan Wahlin, I managed to implement lazy loading of Angular's controllers and services. However, there does not seem to be a clean way to lazy load independent modules.

To better explain my question, assume that I have an app would be structure as below without 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 (...) {...}); 

Here is the sample app with RequireJS in Plunker:
http://plnkr.co/aiarzVpMJchYPjFRrkwn

The core of the problem is that Angular does not allow adding dependency to ng-app post instantiation. As result, my solution is to use angular.injector to retrieve the instance of Picture object to be used in my View2Controller. See js/scripts/controllers/ctrl2.js file.

This creates 2 problems for me:

  1. The injected services runs outside of angular and therefore all async call must end with $scope.$apply()
  2. Messy code where some object can be injected using standard angular syntax while others require the explicit use of injector.

Have any of you figured out how to lazy load independent module using RequireJS and somehow hook this module in angular so normal angular dependency injection syntax can be used?

Note:
The question is on lazy loading of independent module. One simple solution to this specific example is to create "Pictures" object using cached $providers during ng-app.config but that is not what I am looking for. I am looking for solution that works with 3rd party module such as angular-resource.

like image 285
marcoseu Avatar asked Oct 02 '13 09:10

marcoseu


1 Answers

I finalized my own implementation called angularAMD and here is the sample site that uses it:

http://marcoslin.github.io/angularAMD/

It handles config functions and out of order module definitions.

Hopefully this can help other looking for something to help them with RequireJS and AngularJS integration.

like image 148
marcoseu Avatar answered Sep 16 '22 12:09

marcoseu