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注意img图片的onerror事件的分析
Jan 01 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
Aug 01 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
利用HBuilder打包前端开发webapp为apk的方法
Nov 13 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
JS script脚本中async和defer区别详解
Jun 24 Javascript
原生js+canvas实现下雪效果
Aug 02 Javascript
解决vue项目 build之后资源文件找不到的问题
Sep 12 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
Oct 01 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 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
[JS]点出统计器
2020/10/11 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Python for循环及基础用法详解
2019/11/08 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
python中数字是否为可变类型
2020/07/08 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
关于Java finally的面试题
2016/04/27 面试题
小学英语教学反思案例
2014/02/04 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
护士心得体会范文
2016/01/25 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android
openstack云计算keystone组件工作介绍
2022/04/20 Servers