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 相关文章推荐
基于jQuery制作迷你背词汇工具
Jul 27 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
May 23 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
Dec 02 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
jquery右下角自动弹出可关闭的广告层
May 08 Javascript
封装属于自己的JS组件
Jan 27 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
原生js实现省市区三级联动代码分享
Feb 12 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
vue中v-for通过动态绑定class实现触发效果
Dec 06 Javascript
Django模板继承 extend标签实例代码详解
May 16 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模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
实习自我评价怎么写
2013/12/02 职场文书
劳资协议书范本
2014/04/23 职场文书
端午节活动总结
2014/08/26 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
停车场管理制度范本
2015/08/05 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis
MySQL创建表操作命令分享
2022/03/25 MySQL