详解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 相关文章推荐
Jquery跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
jQuery图片轮播的具体实现
Sep 11 Javascript
使用js画图之画切线
Jan 12 Javascript
原生JavaScript实现Ajax的方法
Apr 07 Javascript
json传值以及ajax接收详解
May 24 Javascript
值得分享的轻量级Bootstrap Table表格插件
May 30 Javascript
JavaScript中数据类型转换总结
Dec 25 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
JS中如何轻松遍历对象属性的方式总结
Aug 06 Javascript
ES6学习笔记之let与const用法实例分析
Jan 22 Javascript
详解TypeScript的基础类型
Feb 18 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
javascript实现连续赋值
2015/08/10 Javascript
Vue响应式原理详解
2017/04/18 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
基于Python代码编辑器的选用(详解)
2017/09/13 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python中删除某个元素的方法解析
2019/11/05 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
岗位职责怎么写
2014/03/14 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
商标侵权律师函
2015/05/27 职场文书
亲戚关系证明
2015/06/24 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技
索尼ICF-36收音机评测
2022/04/30 无线电
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL