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 相关文章推荐
Prototype Number对象 学习
Jul 19 Javascript
div+css布局的图片连续滚动js实现代码
May 04 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
JS循环遍历JSON数据的方法
Jul 08 Javascript
Javascript 构造函数详解
Oct 22 Javascript
JavaScript学习笔记之数组求和方法
Mar 23 Javascript
js实现界面向原生界面发消息并跳转功能
Nov 22 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
Sep 03 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
Oct 12 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 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中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
JS简单计算器实例
2015/01/20 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
Javascript 之封装(Package)
2018/09/14 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
python妹子图简单爬虫实例
2015/07/07 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
extern是什么意思
2016/03/10 面试题
幼儿园中班区域活动总结
2014/07/09 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
爱心捐款感谢信
2015/01/20 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python