AngularJS动态加载模块和依赖的方法分析


Posted in Javascript onNovember 08, 2016

本文实例讲述了AngularJS动态加载模块和依赖的方法。分享给大家供大家参考,具体如下:

前言

由于AngularJS是单页面应用框架,在正常的情况下,会在访问页面的时候将所有的CSS、JavaScript文件都加载进来。文件不多的时候,页面启动速度倒不会影响太多。但是一旦文件数太多或者加载的第三方库比较大的时候,就会影响页面启动速度。因此对于应用规模大、文件数比较多或者加载的第三方库比较大的时候,采用动态加载JS或者动态加载模块会极大提升页面的启动速度。本文将介绍如何利用ocLazyLoad实现动态加载。

准备

AngularJS动态加载依赖第三方库:ocLazyLoad。ocLazyLoad是一个第三方库,支持AngularJS动态加载module、service、directive以及静态文件。

安装ocLazyLoad

可通过npm或者bower进行安装

npm install oclazyload
bower install oclazyload

将ocLazyLoad module 添加到你的应用中

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

配置 ocLazyLoad

你可以在 config函数中配置 $ocLazyLoadProvider,配置文件如下

.config(['$ocLazyLoadProvider', function($ocLazyLoadProvider){
  $ocLazyLoadProvider.config({
    debug: true,
    events: true,
    modules: [
      {
        name: 'TestModule',
        files: ['test.js']
      }
    ]
  })
}])

debug: 用来开启debug模式。布尔值,默认是false。当开启debug模式时,$ocLazyLoad会打印出所有的错误到console控制台上。
events:当你动态加载了module的时候,$ocLazyLoad会广播相应的事件。布尔值,默认为false。
modules:用于定义你需要动态加载的模块。定义每个模块的名字需要唯一。
modules必须要用数组的形式,其中files也必须以数组的形式存在,哪怕只需要加载一个文件

在路由当中加载module

.config(['$routeProvider', function($routeProvider) {
    $routeProvider.otherwise('/index');
    $routeProvider.when('/index', {
      templateUrl: 'index.html',
      controller: 'IndexController',
      resolve: { // resolve 里的属性如果返回的是 promise对象,那么resolve将会在view加载之前执行
        loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
          // 在这里可以延迟加载任何文件或者刚才预定义的modules
          return $ocLazyLoad.load('TestModule'); //加载刚才定义的TestModule
          /*return $ocLazyLoad.load([  // 如果要加载多个module,需要写成数组的形式
            'TestModule',
            'MainModule'
            ]);*/
        }]
      }
    })
}])

resolve设置的属性可以被注入到Controller当中。如果resolve返回的是promise对象的话,那么它们将在控制器加载以及$routeChangeSuccess被触发之前执行。

$ocLazyLoad就是利用这个原理hack,进行动态加载。

resolve的值可以是:

* key,the value of key 是会被注入到Controller的依赖的名字;
* factory,即可以是一个service的名字,也可以是一个返回值,它是会被注入到控制器中的函数或可以被resolve的promise对象。

通过这样的配置,就可以实现了AngularJS动态加载模块和依赖。但是ocLazyLoad提供的功能更加丰富,不止动态加载模块和依赖,还能动态加载service,diretive等。更多的功能,可以访问[ocLazyLoad官网](https://oclazyload.readme.io)

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
JS实现的数组全排列输出算法
Mar 19 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 Javascript
js实现精确到毫秒的倒计时效果
Aug 05 Javascript
vue+vue-validator 表单验证功能的实现代码
Nov 13 Javascript
JS 实现微信扫一扫功能
Sep 14 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
Sep 30 Javascript
Vue移动端实现图片上传及超过1M压缩上传
Dec 23 Javascript
微信小程序学习总结(五)常见问题实例小结
Jun 04 Javascript
JS文件上传神器bootstrap fileinput详解
Jan 28 #Javascript
Javascript数组循环遍历之forEach详解
Nov 07 #Javascript
关于webuploader插件使用过程遇到的小问题
Nov 07 #Javascript
jQuery webuploader分片上传大文件
Nov 07 #Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 #Javascript
jquery.validate表单验证插件使用方法解析
Nov 07 #Javascript
功能强大的jquery.validate表单验证插件
Nov 07 #Javascript
You might like
比较时间段一与时间段二是否有交集的php函数
2011/05/31 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php实现文件编码批量转换
2014/03/10 PHP
jQuery each()小议
2010/03/18 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
Python迭代器和生成器介绍
2015/03/06 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
flask-restful使用总结
2018/12/04 Python
实时获取Python的print输出流方法
2019/01/07 Python
Django 返回json数据的实现示例
2020/03/05 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
医学毕业生自荐信
2013/10/11 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
养殖项目策划书范文
2014/01/13 职场文书
农业开发项目建议书
2014/05/16 职场文书
火锅店的活动方案
2014/08/15 职场文书
2014年双拥工作总结
2014/11/21 职场文书
小学优秀学生评语
2014/12/29 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS