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 相关文章推荐
为什么要在引入的css或者js文件后面加参数的详细讲解
May 03 Javascript
js中事件的处理与浏览器对象示例介绍
Nov 29 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
javascript去掉代码里面的注释
Jul 24 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
Mar 21 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
手动用webpack搭建第一个ReactApp的示例
Apr 11 Javascript
页面点击小红心js实现代码
May 26 Javascript
js异步上传多张图片插件的使用方法
Oct 22 Javascript
微信小程序错误this.setData报错及解决过程
Sep 18 Javascript
React+EggJs实现断点续传的示例代码
Jul 07 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 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
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php数组遍历类与用法示例
2019/05/24 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
javascript 二维数组的实现与应用
2010/03/16 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
Selenium定位元素操作示例
2018/08/10 Python
python之mock模块基本使用方法详解
2019/06/27 Python
django中ImageField的使用详解
2020/12/21 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
毕业自我鉴定
2013/11/05 职场文书
应用英语专业自荐信
2014/01/26 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
中职生求职信
2014/07/01 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
同事欢送会致辞
2015/07/31 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python