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 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
Jan 18 Javascript
动态加载jQuery的方法
Jun 16 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
jquery.validate提示错误信息位置方法
Jan 22 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
Jun 17 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
利用Decorator如何控制Koa路由详解
Jun 26 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
Dec 24 Javascript
微信小程序 textarea 层级过高问题简单解决方案
Oct 14 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 Javascript
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
解决GD中文乱码问题
2007/02/14 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
python k-近邻算法实例分享
2014/06/11 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python3多线程知识点总结
2019/09/26 Python
Python内置函数locals和globals对比
2020/04/28 Python
Django websocket原理及功能实现代码
2020/11/14 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
八年级物理教学反思
2014/01/19 职场文书
房产公证委托书范本
2014/09/20 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android