详解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 相关文章推荐
Javascript - HTML的request类
Jul 15 Javascript
javascript在事件监听方面的兼容性小结
Apr 07 Javascript
jquery关于图形报表的运用实现代码
Jan 06 Javascript
input禁止键盘及中文输入,但可以点击
Feb 13 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
详解打造 Vue.js 可复用组件
Mar 24 Javascript
js实现图片加载淡入淡出效果
Apr 07 Javascript
JS查找数组中重复元素的方法详解
Jun 14 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
May 24 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
Jul 22 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
如何删除多级目录
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
Jquery 表格合并的问题分享
2011/09/17 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
Python里隐藏的“禅”
2014/06/16 Python
Python的动态重新封装的教程
2015/04/11 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
基于python的字节编译详解
2017/09/20 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
Python的argparse库使用详解
2018/10/09 Python
Python3爬虫学习入门教程
2018/12/11 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
绝对经典成功的大学生推荐信
2013/11/08 职场文书
小学二年级评语
2014/04/21 职场文书
英语教师求职信
2014/06/16 职场文书
学校宣传标语
2014/06/18 职场文书
民政局个人整改措施
2014/09/24 职场文书