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 相关文章推荐
Google Map Api和GOOGLE Search Api整合实现代码
Jul 18 Javascript
jquery 滚动条事件简单实例
Jul 12 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
Sep 10 Javascript
JS动态修改iframe高度和宽度的方法
Apr 01 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
简单理解JavaScript中的封装与继承特性
Mar 19 Javascript
前端性能优化及技巧
May 06 Javascript
webpack常用配置项配置文件介绍
Nov 07 Javascript
vue实现验证码输入框组件
Dec 14 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 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
使用 php4 加速 web 传输
2006/10/09 PHP
加强版phplib的DB类
2008/03/31 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
javascript中 try catch用法
2015/08/16 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
使用python进行拆分大文件的方法
2018/12/10 Python
Python中new方法的详解
2019/01/15 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
啤酒销售实习自我鉴定
2013/09/24 职场文书
梅花魂教学反思
2014/04/25 职场文书
食品工程专业求职信
2014/06/15 职场文书
先进学校事迹材料
2014/12/30 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers