Lazy loading
Preparing your project for lazy loading
Section titled “Preparing your project for lazy loading”After including oclazyload.js in your index file, declare ocLazyLoad as a dependency in app.js
//Make sure you put the correct dependency! it is spelled different than the service!angular.module('app', [ 'oc.lazyLoad', 'ui-router'])In order to lazily load files inject the $ocLazyLoad service into a controller or another service
.controller('someCtrl', function($ocLazyLoad) { $ocLazyLoad.load('path/to/file.js').then(...);});Angular modules will be automatically loaded into angular.
Other variation:
$ocLazyLoad.load([ 'bower_components/bootstrap/dist/js/bootstrap.js', 'bower_components/bootstrap/dist/css/bootstrap.css', 'partials/template1.html']);For a complete list of variations visit the official documentation
Usage with router
Section titled “Usage with router”UI-Router:
Section titled “UI-Router:”.state('profile', { url: '/profile', controller: 'profileCtrl as vm' resolve: { module: function($ocLazyLoad) { return $ocLazyLoad.load([ 'path/to/profile/module.js', 'path/to/profile/style.css' ]); } }});ngRoute:
Section titled “ngRoute:”.when('/profile', { controller: 'profileCtrl as vm' resolve: { module: function($ocLazyLoad) { return $ocLazyLoad.load([ 'path/to/profile/module.js', 'path/to/profile/style.css' ]); } } });Using dependency injection
Section titled “Using dependency injection”The following syntax allows you to specify dependencies in your module.js instead of explicit specification when using the service
angular.module('lazy', [ 'alreadyLoadedDependency1', 'alreadyLoadedDependency2', ... [ 'path/to/lazily/loaded/dependency.js', 'path/to/lazily/loaded/dependency.css' ]]);Note: this syntax will only work for lazily loaded modules!
Using the directive
Section titled “Using the directive”<div oc-lazy-load="['path/to/lazy/loaded/directive.js', 'path/to/lazy/loaded/directive.html']">
<!-- myDirective available here --><my-directive></my-directive>
</div>Remarks
Section titled “Remarks”- If your lazy loaded dependencies require other lazy loaded dependencies make sure you load them in the right order!
angular.module('lazy', [ 'alreadyLoadedDependency1', 'alreadyLoadedDependency2', ... { files: [ 'path/to/lazily/loaded/dependency1.js', 'path/to/lazily/loaded/dependency2.js', //<--- requires lazily loaded dependency1 'path/to/lazily/loaded/dependency.css' ], serie: true //Sequential load instead of parallel }]);