AngularJS $inject depencies dynamically

by yrezgui

HTML

<p>
    <a href="#/">index</a>
    <br>
    <a href="#/base64">base64</a>
</p>
<hr>
<div ng-view></div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js" ng-autobind></script>

JavaScript

var mainModule = angular.module('main', [], function($routeProvider, $locationProvider) {

    $routeProvider.when('/', {
        template : '<h2>Hello World - {{title}}<h2>',
        controller: 'indexController'
    });

    $routeProvider.when('/base64', {
        template: 
            '<h2>Hello World - Base64 page<h2><br>' +
            '<p>Raw: My text</p>' +
            '<p>Encoded: {{base64.encode("My text")}}</p>',
        controller: 'algoController'
    });

    $routeProvider.otherwise({redirectTo: '/'});
});

angular.module('other', []).factory('base64', ['$window', function($window) {
    return {

        name: 'Base64',
        readonly: false,

        encode: function(input) {
            return $window.btoa(input);
        },

        decode: function(input) {
            return $window.atob(input);
        }

    };
}]);

mainModule.factory('base64', ['$window', function($window) {
    return {

        name: 'Base64',
        readonly: false,

        encode: function(input) {
            return $window.btoa(input);
        },

        decode: function(input) {
            return $window.atob(input);
        }

    };
}]);



var indexController = function($scope) {
    $scope.title = 'Index page';
};

var algoController = function($scope) {
    $scope.base64 = angular.injector(['other']).get('base64');
};