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 相关文章推荐
js window.onload 加载多个函数的方法
Nov 02 Javascript
js parentElement和offsetParent之间的区别
Mar 23 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
jquery常用的12个小功能
Jul 22 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 jQuery
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
vue中使用localstorage来存储页面信息
Nov 04 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 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 Ctemplate引擎开发相关内容
2012/03/03 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
php编程每天必学之验证码
2016/03/03 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
浅析js封装和作用域
2013/07/09 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
python实现排序算法
2014/02/14 Python
Python读取网页内容的方法
2015/07/30 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
python 内置模块详解
2019/01/01 Python
python装饰器原理与用法深入详解
2019/12/19 Python
tensorflow的计算图总结
2020/01/12 Python
Python random模块的使用示例
2020/10/10 Python
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
幼儿园保育员辞职信
2014/01/12 职场文书
经典洗发水广告词
2014/03/13 职场文书
关于安全的标语
2014/06/10 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
基于JavaScript实现年月日三级联动
2021/06/22 Javascript