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 Event对象详解及使用示例
Nov 22 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 Javascript
vue脚手架vue-cli的学习使用教程
Jun 06 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
原生javascript自定义input[type=radio]效果示例
Aug 27 Javascript
JavaScript字符和ASCII实现互相转换
Jun 03 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
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Java分治归并排序算法实例详解
2017/12/12 Python
python读取图片任意范围区域
2019/01/23 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
python遍历路径破解表单的示例
2020/11/21 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
会计专业应届生自荐信
2014/02/07 职场文书
挂职自我鉴定
2014/02/26 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
十佳家长事迹材料
2014/08/26 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
关于颐和园的导游词
2015/01/30 职场文书
银行稽核岗位职责
2015/04/13 职场文书
实习感想范文
2015/08/10 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis