ui-router中使用ocLazyLoad和resolve的具体方法


Posted in Javascript onOctober 18, 2017

1.AngularJS按需加载

AngularJS主要应用开发SPA(Single Page Application)项目,所以在小型项目中,services、filters和controllers都在index.html中加载。Google给的AngularJS官方的angular-seed和angular-phonecat都是这样。

对于复杂一点,大型的项目,如果所有的内容一开始就加载,对首页的性能影响比较大,即使静态javascript文件使用CDN,对性能还是有很大的影响。所有需要引入按需加载机制,而Angular1.x版本中,ocLazyLoad是一个不错的按钮加载解决方案。

2.ocLazyLoad的功能

ocLazyLoad: your solution for lazy loading with Angular 1.x

入门可以参照:ocLazyLoad快速入门,代码也非常简单:

1.引入ocLazyLoad文件,可以使用npm和bower来进行安装

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.min.js"></script>
<script src="libs/angular-ui-router/angular-ui-router.js"></script>
<script src="libs/ocLazyLoad/ocLazyLoad.js"></script>

2.注入 oc.lazyLoad模块

var myApp = angular.module("MyApp", ["oc.lazyLoad"]);

3. 在控制器中加载一个指定的模块

myApp.controller("MyCtrl", function($ocLazyLoad) {
 $ocLazyLoad.load('testModule.js');
});

在实际项目中service和controller文件都是通过ocLazyLoad加载,并且是放在resolve中加载。代码示例如下:

.state('detail',{
   url:"/detail/:bookId",
   templateUrl:"/templates/detail.html",
   controller:"DetailController",
   controllerAs:'ctrl',
   resolve:{
    load:['$ocLazyLoad',function($ocLazyLoad){
     return $ocLazyLoad.load([
      'services/dataService.js'
      ]);
    }],
    currentBook:['$ocLazyLoad','$stateParams','$injector',function($ocLazyLoad,$stateParams,$injector){
     var bookId=$stateParams.bookId;
     return $ocLazyLoad.load('services/booksService.js').then(function(){
      return $injector.get('booksService').getBookById(bookId);;
     });

    }]
   }
  })

3.resolve属性

resolve在state配置参数中,是一个对象(key-value),每一个value都是一个可以依赖注入的函数,并且返回的是一个promise(当然也可以是值,resloved defer)。

4.resolve中加载service

resolve中加载services,但是请求都是异步的,返回的顺序不是按照顺序来的。在currentBook中需要调用booksService里面的getBookById()方法。这个时候虽然在load里面已经加载dataService.js,但是在currentBook中是无法使用getBookById()方法,所以在currentBook对象中,所以必须重新加载booksService.js。这个时候就需要$injector中的get()方法。$injector

5.图书列表和详细页demo

ui-router中使用ocLazyLoad和resolve的具体方法

6.参考网址

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

Javascript 相关文章推荐
javascript 文档的编码问题解决
Mar 01 Javascript
使用js 设置url参数
Jul 08 Javascript
node.js中的http.response.end方法使用说明
Dec 14 Javascript
Jquery 垂直多级手风琴菜单附源码下载
Nov 17 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
js禁止浏览器的回退事件
Apr 20 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
vue+vue-validator 表单验证功能的实现代码
Nov 13 Javascript
Vue.js 事件修饰符的使用教程
Nov 01 Javascript
js指定日期增加指定月份的实现方法
Dec 19 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 Javascript
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
VUE长按事件需求详解
Oct 18 #Javascript
vue router仿天猫底部导航栏功能
Oct 18 #Javascript
Node做中转服务器转发接口
Oct 18 #Javascript
Vue组件之Tooltip的示例代码
Oct 18 #Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 #Javascript
详解vue项目首页加载速度优化
Oct 18 #Javascript
JS简单实现滑动加载数据的方法示例
Oct 18 #Javascript
You might like
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
浅析Python中的多条件排序实现
2016/06/07 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python模块之paramiko实例代码
2018/01/31 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
python实现扫雷游戏的示例
2020/10/20 Python
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
中考冲刺决心书
2014/03/11 职场文书
我的老师教学反思
2014/05/01 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
python 对图片进行简单的处理
2021/06/23 Python
java代码实现空间切割
2022/01/18 Java/Android