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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
电子商务网站上的常用的js放大镜效果
Dec 08 Javascript
js事件监听机制(事件捕获)总结
Aug 08 Javascript
js对字符的验证方法汇总
Feb 04 Javascript
JavaScript显示表单内元素数量的方法
Apr 02 Javascript
js判断日期时间有效性的方法
Oct 24 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
Apr 20 Javascript
Vue实现web分页组件详解
Nov 28 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
如何使用原生Js实现随机点名详解
Jan 06 Javascript
Java无向树分析 实现最小高度树
Apr 09 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
什么是短波收听SWL
2021/03/01 无线电
删除数组元素实用的PHP数组函数
2008/08/18 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
js实现筛选功能
2020/11/24 Javascript
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
django如何实现视图重定向
2019/07/24 Python
Python 变量的创建过程详解
2019/09/02 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
laravel使用redis队列实例讲解
2021/03/23 PHP
面包店的创业计划书范文
2014/01/16 职场文书
大学运动会通讯稿
2014/01/28 职场文书
篝火晚会策划方案
2014/05/16 职场文书
代办社保委托书范文
2014/10/06 职场文书
工作简历自我评价
2015/03/11 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript