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 相关文章推荐
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
May 05 Javascript
简单对比分析JavaScript中的apply,call与this的使用
Dec 04 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
Aug 29 Javascript
webpack配置sass模块的加载的方法
Jul 30 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
Vue中$refs的用法详解
Jun 24 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
代码整洁之道(重构)
Oct 25 Javascript
深入koa-bodyparser原理解析
Jan 16 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
微信小程序 根据不同用户切换不同TabBar
Apr 21 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标签云的实现代码
2012/10/10 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
Python算法应用实战之队列详解
2017/02/04 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
浅谈Python 递归算法指归
2019/08/22 Python
python 实现两个npy档案合并
2020/07/01 Python
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
全运会口号
2014/06/20 职场文书
2014年化验室工作总结
2014/11/21 职场文书
产品质量保证书范本
2015/02/27 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
React 高阶组件HOC用法归纳
2021/06/13 Javascript
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js