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 模拟类机制及私有变量的方法及思路
Jul 10 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
Nov 25 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
JS实现针对给定时间的倒计时功能示例
Apr 11 Javascript
纯js实现动态时间显示
Sep 07 Javascript
vue.js使用3DES加密的方法示例
May 18 Javascript
微信小程序select下拉框实现源码
Nov 08 Javascript
react中hook介绍以及使用教程
Dec 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生成缩略图的代码
2011/01/12 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
itchat接口使用示例
2017/10/23 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
详解django自定义中间件处理
2018/11/21 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
舞蹈教育学专业推荐信
2013/11/27 职场文书
师范生个人推荐信
2013/11/29 职场文书
洗手间标语
2014/06/23 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
班主任寄语2016
2015/12/04 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
python - asyncio异步编程
2021/04/06 Python
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js