Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:加载另一个js文件后动态注入模块_Javascript_Angularjs_Angularjs Injector - Fatal编程技术网

Javascript AngularJS:加载另一个js文件后动态注入模块

Javascript AngularJS:加载另一个js文件后动态注入模块,javascript,angularjs,angularjs-injector,Javascript,Angularjs,Angularjs Injector,我更广泛的问题陈述是减少主网页中使用的JS文件大小。我使用grunt uglify将其从455KB缩小到140KB 作为第二步,我将删除主页上不需要的不必要文件。因此,我能够将初始JS文件大小减少到90KB,剩余的50KB文件将在以后加载 我使用了中提到的Ben Thielker的loadScript函数 将JS文件动态加载到head 现在的问题是,在第二个JS文件中定义的模块没有作为 他们的依赖关系在应用程序开始时无法被提及(将抛出错误)。我想动态加载第二个JS文件中的模块 我在前面提到的lo

我更广泛的问题陈述是减少主网页中使用的JS文件大小。我使用grunt uglify将其从455KB缩小到140KB

作为第二步,我将删除主页上不需要的不必要文件。因此,我能够将初始JS文件大小减少到90KB,剩余的50KB文件将在以后加载

我使用了中提到的Ben Thielker的loadScript函数 将JS文件动态加载到head

现在的问题是,在第二个JS文件中定义的模块没有作为 他们的依赖关系在应用程序开始时无法被提及(将抛出错误)。我想动态加载第二个JS文件中的模块

我在前面提到的loadScript的回调函数中尝试了以下操作:

angular.module('reportsApp', ['reportsApp.DList', 'reportsApp.item', 'reportsApp.Filters', 'reportsApp.Download'])
.controller('ReportsCtrl', ['$scope', '$rootScope', '$injector', function($scope, $rootScope, $injector) {
    $rootScope.accessDenied = !$scope.accessReports;
    $rootScope.loadScript('public/js/grid.min.js','text/javascript','utf-8', function() {
        console.log('****************grid.min.js loaded successfully.....');                        
        var grid;
        var bool = $injector.has('reportsApp.Grids');
        console.log(bool);//outputs "false"         
        if(bool) {              
            grid = $injector.get('reportsApp.Grids');
        }           
    });     
}])
但是上面的代码甚至没有检测到模块。 当我查看angular的createInjector函数时,我发现他们在modulename的末尾添加了一个字符串“Provider”。我不确定这是不是把事情搞砸了

此外,这是reportsApp.Grids模块的第1行:

angular.module('reportsApp.Grids', ['ui.grid'])
这里,reportsApp.Grids出现在初始JS文件中, 但是“ui.grid”只出现在稍后加载的第二个JS文件中

我应该如何在这里使用$injector.invoke函数? 或
最好的方法是什么?

您能介绍一下如何定义“reportsApp.Grids”以及它是什么吗?如果reportsApp是您模块的名称,您可能只需要尝试一下
$injector.has('Grids')
,看看发生了什么@MichaelRose,这就是所问的模块:-angular.module('reportsApp.Grids',['ui.grid'])事实上,reportsApp.Grids存在于初始JS文件中。它是'ui.grid',来自稍后加载的第二个JS文件。不要向$injector索要模块,$injector只能按名称提供服务等,而不是完整的模块@MichaelRose我尝试了“var bool=$injector.has('AuditTrailGridCtrl'),这也是reportsApp.Grids中的一个控制器。但它给出的仍然是false。要清楚,您无法通过$injector获得控制器$注入器只能为您提供可以注入函数的东西。。。请看这把小提琴,看一个例子:你能说明你如何定义“reportsApp.Grids”以及它是什么吗?如果reportsApp是您模块的名称,您可能只需要尝试一下
$injector.has('Grids')
,看看发生了什么@MichaelRose,这就是所问的模块:-angular.module('reportsApp.Grids',['ui.grid'])事实上,reportsApp.Grids存在于初始JS文件中。它是'ui.grid',来自稍后加载的第二个JS文件。不要向$injector索要模块,$injector只能按名称提供服务等,而不是完整的模块@MichaelRose我尝试了“var bool=$injector.has('AuditTrailGridCtrl'),这也是reportsApp.Grids中的一个控制器。但它给出的仍然是false。要清楚,您无法通过$injector获得控制器$注入器只能为您提供可以注入函数的东西。。。请参阅此小提琴以了解示例: