2

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

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

现在,我只需要pascalprecht.translate在我的一个controllerschart.js另一个延迟加载中延迟加载controller,但我仍然需要将它们添加到myApp模块但我不知道如何注入并且我不使用$stateProvider

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

//Load here.
//$ocLazyLoad.load('./panel/dist/test.js');
angular.module('myApp', ['chart.js', [
 './panel/dist/static/chart.min.js',
 './panel/dist/static/angular-chart.min.js'
]]);

$ocLazyLoad.load('./panel/dist/static/chart.min.js');
$ocLazyLoad.load('./panel/dist/static/angular-chart.min.js');

但我得到了这个错误:

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

4

1 回答 1

0

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

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

现在,您想从不同的控制器(比如说路由)访问一些库,正如您所说的您不使用$stateProvider这意味着您不使用(这是一个处理路由和 URL 的第三方库)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对你很有用

于 2016-10-08T14:17:17.443 回答