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面向对象之体会[总结]
Nov 13 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
JSON格式化输出
Nov 10 Javascript
javascript实现的固定位置悬浮窗口实例
Apr 30 Javascript
用Move.js配合创建CSS3动画的入门指引
Jul 22 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
jQuery 常见小例汇总
Dec 14 Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 Javascript
layui-table表复选框勾选的所有行数据获取的例子
Sep 13 Javascript
Element MessageBox弹框的具体使用
Jul 27 Javascript
jQuery实现带进度条的轮播图
Sep 13 jQuery
vue操作dom元素的3种方法示例
Sep 20 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针对数字的加密解密类
2014/03/20 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
php查询操作实现投票功能
2016/05/09 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
Python中格式化format()方法详解
2017/04/01 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
浅析Python 多行匹配模式
2020/07/24 Python
python中温度单位转换的实例方法
2020/12/27 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
三严三实学习心得体会
2014/10/13 职场文书
2015年见习期工作总结
2014/12/12 职场文书
收费员岗位职责
2015/02/14 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
Python数据分析之pandas读取数据
2021/06/02 Python
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js