AngularJS Lazy-Loading

Using $injector for lazy-loading

by Jeremy Likness

HTML

<div ng-app='myApp'>
    <ul>
        <li ng-repeat='log in logs'>{{log}}</li>
    </ul>
</div>

JavaScript

(function (app) {
    app.config(['$provide', function ($provide) {
        $provide.decorator('$log', ['$delegate', '$injector', function ($delegate, $injector) {
            var log = $delegate.log.bind($delegate);
            $delegate.log = function (msg) {
                var rs = $injector.get('$rootScope');
                if (rs.logs === undefined) {
                    rs.logs = [];
                }
                rs.logs.push(msg);
                log(msg);
            };
            return $delegate;
        }]);
    }])
    .run(['$log', function ($log) {
        $log.log('Application running.');
    }]);
})(angular.module('myApp', []));