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 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
使用angular写一个hello world
Jan 23 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
Jquery 垂直多级手风琴菜单附源码下载
Nov 17 Javascript
jQuery插件实现多级联动菜单效果
Dec 01 Javascript
php输出全部gb2312编码内的汉字方法
Mar 04 Javascript
详解KOA2如何手写中间件(装饰器模式)
Oct 11 Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
利用d3.js实现蜂巢图表带动画效果
Sep 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
PHP XML操作类DOMDocument
2009/12/16 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
介绍信怎么写
2015/05/05 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技