详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖


Posted in Javascript onMarch 01, 2017

最近在使用AngularJS,发现AngularJS菜鸟教程上的东西太过于基础,很多东西都没有提及,比如今天的一个关于前端的优化问题,懒加载。通过路由实现地址分发的时候,再通过懒加载模式加载你所需的文件,比如是相关的controller,就是js,这样有利于提高首次加载的负担。

下面就是一个懒加载的实现过程。

实现的过程主要是引用3个主要的JS文件:

<script src="angular/1.4.8/angular/angular.min.js"></script>
<script src="angular/ui-router/release/angular-ui-router.min.js"></script>
<script src="angular/oclazyload/src/ocLazyLoad.min.js"></script>

然后通过 APP 配置,将依赖的脚本进行注入操作:

var app = angular.module('pkcms', ["ui.router", "oc.lazyLoad"]);

app.config(["$provide", "$compileProvider", "$controllerProvider", "$filterProvider",


 
function ($provide, $compileProvider, $controllerProvider, $filterProvider) {




 app.controller = $controllerProvider.register;




 app.directive = $compileProvider.directive;




 app.filter = $filterProvider.register;




 app.factory = $provide.factory;




 app.service = $provide.service;




 app.constant = $provide.constant;


 
}]);



// 按模块化加载其他的脚本文件




app.constant('Modules_Config', [




 {





 name: 'treeControl',





 serie: true,





 files: [






 "Scripts/angular-bootstrap/ui-bootstrap-tpls-0.14.3.min.js"





 ]<br>}]);




app.config(["$ocLazyLoadProvider","Modules_Config",routeFn]);




function routeFn($ocLazyLoadProvider,Modules_Config){




 $ocLazyLoadProvider.config({




 debug:false,




 events:false,




 modules:Modules_Config


 });

};

以上是初始化动态加载的配置过程。

接着是建立路由:

"use strict"
app.config(["$stateProvider","$urlRouterProvider",routeFn]);
function routeFn($stateProvider,$urlRouterProvider){
 $urlRouterProvider.otherwise("/main");
 $stateProvider
 .state("main",{
 url:"/main",
 templateUrl:"views/main.html",
 controller:"mainCtrl",
 controllerAs:"main",
 resolve:{
 deps:["$ocLazyLoad",function($ocLazyLoad){
 return $ocLazyLoad.load("controllers/main.js");
 }]
 }
 })
 .state("adminUser",{
 url:"/adminUser",
 templateUrl:"views/adminUser.html",
 controller:"adminUserCtrl",
 controllerAs:"adminUser",
 resolve:{
 deps:["$ocLazyLoad",function($ocLazyLoad){
 return $ocLazyLoad.load("controllers/adminUser.js");
 }]
 }
 })
};

最后是按路由配置的在对应目录下建2个HTML页面文件和2个JS文件用做测试

main.html

<div>
 {{main.value}}
</div>

adminUser.html

<div>
 {{adminUser.value}}
</div>

main.js 

/**
 * mainCtrl
 * Created by pkcms.cn on 2016/6/24.
 */
(function () {
 "use strict"
 app.controller("mainCtrl", mainCtrlFn);
 function mainCtrlFn() {
 this.value = "Hello World";
 }
}())

adminUser.js

/**
 * adminUserCtrlFn
 * Created by pkcms.cn on 2016/6/24.
 */
(function () {
 app.controller('adminUserCtrl',adminUserCtrlFn);
 function adminUserCtrlFn() {
 this.value = "welcome to admin user";
 }
}());

demo下载:angularjs-oclazyload_3water.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表单元素事件 (Form Element Events)
Jul 17 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
Mar 12 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
Apr 20 Javascript
jQuery中after()方法用法实例
Dec 25 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
详解angular中的作用域及继承
May 31 Javascript
echarts学习笔记之图表自适应问题详解
Nov 22 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
微信小程序swiper实现滑动放大缩小效果
Nov 15 Javascript
简单分析js中的this的原理
Aug 31 Javascript
Element Rate 评分的使用方法
Jul 27 Javascript
基于JavaScript实现随机点名器
Feb 25 Javascript
Javascript仿京东放大镜的效果
Mar 01 #Javascript
Ajax实现不刷新取最新商品
Mar 01 #Javascript
Angular1.x复杂指令实例详解
Mar 01 #Javascript
JS中使用 after 伪类清除浮动实例
Mar 01 #Javascript
Angular1.x自定义指令实例详解
Mar 01 #Javascript
轻松学习Javascript闭包
Mar 01 #Javascript
js图片延迟加载(Lazyload)三种实现方式
Mar 01 #Javascript
You might like
php字符串截取函数用法分析
2014/11/25 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
PHP缓冲区用法总结
2016/02/14 PHP
浅谈PHP中的
2016/04/23 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Prototype的Class.create函数解析
2011/09/22 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
python根据出生日期获得年龄的方法
2015/03/31 Python
详解python多线程之间的同步(一)
2019/04/03 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
大学新生军训个人的自我评价
2013/10/03 职场文书
会议接待欢迎词
2014/01/12 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
学籍证明模板
2014/11/21 职场文书
《我是什么》教学反思
2016/02/16 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python