AngularJS中的按需加载ocLazyLoad示例


Posted in Javascript onJanuary 11, 2017

一、前言

ocLoayLoad是AngularJS的模块按需加载器。一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题。但是当我们的网站渐渐庞大起来,这样子的加载策略让网速初始化速度变得越来越慢,用户体验不好。二来,分模块加载易于团队协作,减低代码冲突。

二、按需加载的对象

各个Controller模块、Directive模块、Server模块、template模板,其实这些都是一些 .js文件或者 .html文件 。

三 、按需加载的场景

1 路由加载(resolve/uiRouter)

基于uiRouter的resolve是在加载controller和template之前所执行的一系列操作,它帮助我们初始化我们所要前往的那一个视图。只有be solved(操作完成),controller才会被实例化。因此,我们可以在resolve步骤里面加载我们所需要的controller。

$stateProvider
    .state('index', {
      url: '/',
      views: {
        'lazyLoadView': {
          templateUrl: 'partials/main.html',
          controller: 'AppCtrl'
        }  
      },
      resolve: {
        loadMyCtrl: ['$ocLazyLoad', function($ocLazyLoad){
          return $ocLazyLoad.load('js/AppCtrl.js')
        }]
      }
    })

其中,'js/AppCtrl.js'里面放着一个我们所需要的controller

angular.module('myApp')
.controller('AppCtrl', ['$scope', function($scope){
//...
}])

2 依赖加载

在依赖项里面导入我们所需要的一系列模块(这里有一层'[ ]'符合哦)

angular.module('gridModule', [[
  'bower_components/angular-ui-grid/ui-grid.js',
  'bower_components/angular-ui-grid/ui-grid.css'
]]).controller('GridModuleCtrl', ['$scope', function($scope){
  //...
}])

3 Cotroller里动态加载

angular.module('myApp')
.controller('AppCtrl', ['$scope','$ocLazyLoad', function($scope, $ocLazyLoad){
  $scope.loadBootstrap = function(){
    $ocLazyLoad.load([
     'bower_components/bootstrap/dist/js/bootstrap.js',
     'bower_components/bootstrap/dist/css/bootstrap.css'
    ])
  }
  var unbind = $scope.$on('ocLazyLoad.fileLoaded', function(e, file){
    $scope.bootstrapLoaded = true;
     console.log('下载boot完成');
     unbind();
  })
}])

4 template包含加载(config)

如何处理我们所加载的html模板里面嵌套的controller呢?这里需要oc-lazy-load指令和$ocLazyLoadProvider的配置

/*template A.html*/
<h1>hi i am hzp </h1>
  <div oc-lazy-load="gridModule">
    <div ng-controller="GridModuleCtrl">
      <span>{{test}}</span><br/>
      <div ui-grid="gridOptions" class="gridStyle"></div>
    </div>
  </div>
</div>


  $ocLazyLoadProvider.config({
    modules: [{
      name: 'gridModule',
      files: [
        'js/gridModule.js'
      ]
    }]
  })

四、如何组织按需加载

分路由、按功能来区分、打包成不同的多个或单个controller.directive.server模块

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 网页水印(非图片水印)实现代码
Mar 01 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
JScript分割字符串示例代码
Sep 04 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
对Jquery中的ajax再封装,简化操作示例
Feb 12 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
javascript产生随机数方法汇总
Jan 25 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
May 30 Javascript
给easyui datebox扩展一个清空的实例
Nov 09 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
ajax的分页查询示例(不刷新页面)
Jan 11 #Javascript
JavaScript实现大图轮播效果
Jan 11 #Javascript
微信小程序 特效菜单抽屉效果实例代码
Jan 11 #Javascript
canvas 弹幕效果(实例分享)
Jan 11 #Javascript
JQuery实现动态操作表格
Jan 11 #Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
Jan 11 #Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 #Javascript
You might like
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
PHP概率计算函数汇总
2015/09/13 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python学习之time模块的基本使用
2021/01/17 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
大学生社会实践自我鉴定
2014/03/24 职场文书
明信片寄语大全
2014/04/08 职场文书
暑期培训班招生方案
2014/08/26 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
邀请函格式范文
2015/02/02 职场文书
加入学生会自荐书
2015/03/05 职场文书
师范生见习自我总结
2015/06/23 职场文书
初一数学教学反思
2016/02/17 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers