详解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 相关文章推荐
LazyLoad 延迟加载(按需加载)
May 31 Javascript
js变量以及其作用域详解
Jul 18 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
javascript 实现键盘上下左右功能的小例子
Sep 15 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
Jan 26 Javascript
通过url查找a元素并点击
Apr 09 Javascript
一个简单的jQuery计算器实现了连续计算功能
Jul 21 Javascript
ionic中列表项增加和删除的实现方法
Jan 22 Javascript
React styled-components设置组件属性的方法
Aug 07 Javascript
重置Redux的状态数据的方法实现
Nov 18 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
Javascript设计模式之原型模式详细
Oct 05 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
索尼ICF-SW100收音机评测
2021/03/02 无线电
PHP中设置时区方法小结
2012/06/03 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
python版本的仿windows计划任务工具
2018/04/30 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
golang/python实现归并排序实例代码
2020/08/30 Python
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
应届毕业生自荐信
2014/05/28 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript