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 学习笔记(十三)Dom创建表格
Jan 21 Javascript
jQuery ul标签下拉菜单演示代码
Dec 11 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
不提示直接关闭网页窗口的JS示例代码
Dec 17 Javascript
页面刷新时记住滚动条的位置jquery代码
Jun 17 Javascript
node.js中的buffer.length方法使用说明
Dec 14 Javascript
js+html5绘制图片到canvas的方法
Jun 05 Javascript
AngularJS学习笔记之表单验证功能实例详解
Jul 06 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
基于Vue单文件组件详解
Sep 15 Javascript
jQuery pjax 应用简单示例
Sep 20 jQuery
JS中的变量作用域(console版)
Jul 18 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使用socket发送HTTP请求的方法
2016/02/14 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
js日历功能对象
2012/01/12 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
详解Django中的过滤器
2015/07/16 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
一份python入门应该看的学习资料
2018/04/11 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Django nginx配置实现过程详解
2020/09/10 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
婚假请假条格式及范文
2014/04/10 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
防灾减灾标语
2014/10/07 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
2016年母亲节寄语
2015/12/04 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers