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 获取网页参数系统
Jul 19 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
详解JavaScript中Hash Map映射结构的实现
May 21 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
Aug 18 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
vue-cli2 构建速度优化的实现方法
Jan 08 Javascript
详解基于vue-cli3快速发布一个fullpage组件
Mar 08 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
js实现旋转木马轮播图效果
Jan 10 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在Web开发领域的优势
2006/10/09 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
python实现神经网络感知器算法
2017/12/20 Python
python机器学习之KNN分类算法
2018/08/29 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
python编写实现抽奖器
2020/09/10 Python
升职自荐信范文
2013/10/05 职场文书
转让协议书范本
2014/09/13 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
PHP解决高并发问题
2021/04/01 PHP
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers