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 相关文章推荐
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
JavaScript插入动态样式实现代码
Feb 22 Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
JS控制文本框textarea输入字数限制的方法
Jun 17 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
Jul 10 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
Jan 13 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
May 26 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
解决angularjs中同步执行http请求的方法
Aug 13 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
Sep 27 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
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python的面向对象思想分析
2015/01/14 Python
python魔法方法-自定义序列详解
2016/07/21 Python
django站点管理详解
2017/12/12 Python
详解django自定义中间件处理
2018/11/21 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
anaconda如何查看并管理python环境
2019/07/05 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Gap英国官网:Gap UK
2018/07/18 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
人事专员的职责
2014/02/26 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
故宫英文导游词
2015/01/31 职场文书
停电通知范文
2015/04/16 职场文书
好人好事新闻稿
2015/07/17 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Java 多线程并发FutureTask
2022/06/28 Java/Android