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 相关文章推荐
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
jQuery中replaceWith()方法用法实例
Dec 25 Javascript
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
vue自定义指令实现v-tap插件
Nov 03 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
Jul 14 Javascript
详解如何在JS代码中消灭for循环
Dec 11 Javascript
jQuery 选择器用法基础入门示例
Jan 04 jQuery
vue实现循环滚动列表
Jun 30 Javascript
原生js实现自定义难度的扫雷游戏
Jan 22 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代码
2007/03/08 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Collection和Collections的区别
2016/05/02 面试题
怎样填写就业意向
2014/04/02 职场文书
敬老月活动总结
2014/08/28 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
销售会议开幕词
2016/03/04 职场文书
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL