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 相关文章推荐
javascript调试说明
Jun 07 Javascript
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
JS+CSS实现的拖动分页效果实例
May 11 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
JavaScript中的this到底是什么(一)
Dec 09 Javascript
Ionic快速安装教程
Jun 03 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 Javascript
微信小程序实现音乐播放页面布局
Dec 11 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 jQuery
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 移除数组重复元素的一点说明
2008/11/27 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
python编程羊车门问题代码示例
2017/10/25 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
医院合作协议书
2014/08/19 职场文书
整改通知书
2015/04/20 职场文书
个人向公司借款协议书
2016/03/19 职场文书
导游词之江西赣州
2019/10/15 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
ES6 解构赋值的原理及运用
2021/05/25 Javascript
Java实现聊天机器人完善版
2021/07/04 Java/Android
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL