详解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 相关文章推荐
让FireFox支持innerText的实现代码
Dec 01 Javascript
jQuery图片的展开和收缩实现代码
Apr 16 Javascript
jquery果冻抖动效果实现方法
Jan 15 Javascript
通过点击jqgrid表格弹出需要的表格数据
Dec 02 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
May 12 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
canvas绘制的直线动画
Jan 23 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
Mar 08 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
vuex实现像调用模板方法一样调用Mutations方法
Nov 06 Javascript
JavaScript封装单向链表的示例代码
Sep 17 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php实现文件下载实例分享
2014/06/02 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python实现保证只能运行一个脚本实例
2015/06/24 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
在python中修改.properties文件的操作
2020/04/08 Python
Django中的AutoField字段使用
2020/05/18 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
2015年幼儿园毕业感言
2014/02/12 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL