angularJS + requireJS实现控制器及指令的按需加载示例

  

最近因为项目的比较大,需要加载的js文件较多,为了提高首屏页面的加载速度,需要对js文件进行按需加载,然后网上参考了一些资料,自己也深入研究一番之后,实现了按需加载控制器js文件及指令js文件的效果;

  

思路如下

  

1,借助ui-router里面的解决属性来实现预加载

  

2,需要借助美元controllerProvider动态去注册控制器,美元compileProvider动态去注册指令

  

3,需要借助问美元来帮助我们实现异步加载,具体步骤如下所示,

  

1,在我们定义的应用程序(在定义应用。配置()的js文件内)模块上挂载注册控制器和指令的属性,如下所示
  

        app.register={//注意这里的美元controllerProvider是内置注册控制器的属性,compileProvider美元是内置的注册指令的属性      控制器:$ controllerProvider.register      指令:$ compileProvider.directive      }   之前      

2,借助问美元定义一个异步加载js文件的方法(在定义路由的js文件内)

        app.loadMyJs=函数(js) {   返回函数(rootScope,问美元){   var def=$ q.defer (),   deps=[];   angular.isArray (js) & # 63;(deps=js): deps.push (js);   要求(deps、功能(){   rootScope。运用美元(函数(){   deffer.resolve ();   });   });   返回deffer.promise;   };   }      

3,借助路由里面的解决属性,进行配置需要加载的控制器文件及指令文件(在定义路由的js文件内)

        .state (view1, {   url:“/view1”,   templateUrl:“临时/partial1.html”,   控制器:“MyCtrl1”,   解决:{//需要动态加载的控制器及指令js文件,其它js文件以此类推   deps: app.loadMyJs(['。/控制器/my-ctrl-1 ', '。/指令/加载'])   }   })      

4,通过第一步先挂载在应用上的属性来进行动态注册控制器或指令

     //注册控制器(对应的控制器js文件内)   app.register。控制器(MyCtrl1,函数(范围、css,美元rootScope美元){//控制器里面的内容      });//注册指令(对应的指令js文件内)      app.register。指令(“加载”功能(){      返回{   限制:“AE”,   替换:没错,   类模板:“& lt; div=婢摺痭g-show=' isLoading祝辞& lt; span> loading & lt;/div>”   }   });   之前      

如果有服务或过滤器需要按需加载也是类似的方法,另外如果是公共的服务,指令或过滤器等不需要进行按需加载的文件就可以使用普通的angular.module()的方式来定义即可。

  

最后这只是实现按需加载js文件中的一种思路,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

angularJS + requireJS实现控制器及指令的按需加载示例