如何使用ocLazyLoad进行依赖注入

时间:2016-10-05 13:37:55

标签: javascript angularjs dependency-injection oclazyload

我使用ocLazyLoad并且我有一些外部角度库(如Chart.jspascalprecht.translate)并且我需要在某些路径中延迟加载它们,如您所知,对于常见的角度模块依赖注入应该像:

var angularApp = angular.module('myApp',
     ['oc.lazyLoad', 'pascalprecht.translate', 'chart.js']);

现在,我只需要在我的 pascalprecht.translate 和延迟加载controllers之间延迟加载chart.js,在另一个 {{1 }} ,但我仍然需要将它们添加到 controller 模块,但我不知道如何注射,而且我不知道如何注射不要使用myApp

我试过我的控制器,我需要chart.js:

$stateProvider

但是我收到了这个错误:

  

angular-chart.min.js:10未捕获错误:Chart.js库需要   包括在内,请参阅http://jtblin.github.io/angular-chart.js/

1 个答案:

答案 0 :(得分:0)

首先,您不需要在依赖注入中注入chart.js,这应该是您的模块

var angularApp = angular.module('myApp', [ 'oc.lazyLoad' ]);

现在,您希望能够访问来自不同控制器的某些库(比如路线),正如您所说的那样,您不使用$stateProvider,这意味着您不使用 ui-router (这是一个使用路由和网址的第三方库)

这是我的建议(只是一个简单的解决方案):

angularApp.config(function ($routeProvider, $locationProvider) {
    $routeProvider.when('/home', {
        templateUrl: 'views/home.html',
        controller: 'HomeController',
        resolve: {
            store: function ($ocLazyLoad) {
                return $ocLazyLoad.load(
                    {
                        serie: true,
                        name: "chart.js",
                        files: [
                            "./static/chart.min.js",
                            "./static/chart-angular.min.js",
                        ]
                    }
                );
            }
        }
    });

        $routeProvider.when('/needs-translate', { 
        templateUrl: 'views/needs-translate.html',
        controller: 'translateController',
        resolve: {
            store: function ($ocLazyLoad) {
                return $ocLazyLoad.load(
                    {
                        serie: true,
                        name: "pascalprecht.translate",
                        files: [
                            "./static/translate.js"
                        ]
                    }
                );
            }
        }
    });

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

    // use the HTML5 History API
    $locationProvider.hashPrefix = '!';
    $locationProvider.html5Mode(true);
});

顺便说一句,如果您使用的是ui.router,则此Github issue会对您有用