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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
[原创]用javascript实现检测指定目录是否存在的方法
Jan 12 Javascript
js获取图片长和宽度的代码
Nov 24 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
Jul 20 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
Node.js操作mysql数据库增删改查
Mar 30 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
Angular4 中内置指令的基本用法
Jul 31 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 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中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
JScript实现表格的简单操作
2017/08/15 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python中将字典转换为列表的方法
2016/09/21 Python
彻底搞懂Python字符编码
2018/01/23 Python
Python pandas常用函数详解
2018/02/07 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
什么是数组名
2012/05/10 面试题
类和结构的区别
2012/08/15 面试题
《狼和小羊》教学反思
2014/04/20 职场文书
企业文化口号
2014/06/12 职场文书
2014年电教工作总结
2014/12/19 职场文书
教代会开幕词
2015/01/28 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
答谢酒会主持词
2015/07/02 职场文书
升学宴学生致辞
2015/07/27 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis