【问题标题】:AngularJS require module on-demandAngularJS 按需需要模块
【发布时间】:2015-11-12 05:37:40
【问题描述】:

是否可以按需加载惰性和包含模块来满足另一个模块的需求?类似的东西:

var app=angular.module('myApp',[]);
app.controller('myController',['$scope',function($scope){
    $scope.btnClick=function(){    
       (function(d,s,id){
           var js, fjs= d.getElementsByTagName(s)[0];
           if(d.getElementById(id)) return;
           js= d.createElement(s); js.id=id;
           js.onload=function(){
               // do something to make myApp dependent on anotherModule,
               //like if it were loaded initially: myApp=angular.module('myApp',['anotherModule']);
           };
           js.src='/js/anotherModule.js';
           fjs.parentNode.insertBefore(js,fjs);
        }(document,'script','my_id'));
    }
}]);

我想在$scope.btnClick() 上使用来自'anotherModule' 的指令。

【问题讨论】:

  • 你为什么要在控制器中这样做?
  • 因为我希望它在用户单击按钮时加载。在大多数情况下,最初不需要加载 anotherModule.js。实际上,对我来说,在控制器内部执行它并不重要,另一种延迟加载它的方法也可能适合。

标签: angularjs module dependencies lazy-loading


【解决方案1】:

除非你的模块非常大,否则我建议不要延迟加载,因为请求很昂贵。加载一个大文件比加载许多小文件快

如果您担心性能,您应该首先考虑通过连接/缩小/丑化进行优化

这里有一个关于优化您的网站的好资源:https://developer.yahoo.com/performance/rules.html

【讨论】:

  • 所以,如果 Angular 自己不能做到这一点,将我所需的按需模块添加到我的大 .js 文件中似乎更合理。谢谢。
【解决方案2】:

Angular 1 中没有内置功能。

尽管如此,oc-LazyLoad 实现了这一点。

【讨论】:

  • 不错的决定,但它比我要加载的文件要大。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-02-18
  • 2014-05-30
  • 2020-09-02
  • 2012-09-03
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多