我刚试过了 https://oclazyload.readme.io/ 。它开箱即用。
bower install oclazyload --save
将其加载到模块中,并在控制器中注入所需的模块:
var myModule = angular.module('myModule', ['oc.lazyLoad']) .controller('myController', ['$scope', '$ocLazyLoad', '$injector', function($scope, $ocLazyLoad, $injector) { $ocLazyLoad.load( ['myExtraModule.js', 'orAnyOtherBowerLibraryCopiedToPublicFolder.js' ]) .then(function() { // Inject the loaded module var myExraModule = $injector.get('myExtraModule'); }); } ]);
这对我有用。我想将其发布给寻求最轻量级解决方案的其他人。
我在页面的html标签上有一个顶级控制器,每个局部视图都有一个辅助控制器。
在顶级控制器中,我定义了以下功能
$scope.loadScript = function(url, type, charset) { if (type===undefined) type = 'text/javascript'; if (url) { var script = document.querySelector("script[src*='"+url+"']"); if (!script) { var heads = document.getElementsByTagName("head"); if (heads && heads.length) { var head = heads[0]; if (head) { script = document.createElement('script'); script.setAttribute('src', url); script.setAttribute('type', type); if (charset) script.setAttribute('charset', charset); head.appendChild(script); } } } return script; } };
所以在辅助控制器中,我可以通过如下调用来加载所需的脚本
$scope.$parent.loadScript('lib/ace/ace.js', 'text/javascript', 'utf-8');
在外部脚本中包含的对象可用之前会有一点延迟,因此在尝试使用它们之前,您需要验证它们的存在。
希望能节省一些时间。
我真的打破了这个想法。在angularjs中默认不支持延迟加载,这是一种痛苦。无论如何这里有两个链接,帮助我解决它:
http://ify.io/lazy-loading-in-angularjs/
http://www.bennadel.com/blog/2554-Loading-AngularJS-Components-With-RequireJS-After-Application-Bootstrap.htm