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 相关文章推荐
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
jquery实现页面图片等比例放大缩小功能
Feb 12 Javascript
一个Action如何调用两个不同的方法
May 22 Javascript
JS解析XML实例分析
Jan 30 Javascript
javascript关于运动的各种问题经典总结
Apr 27 Javascript
jQuery 3.0中存在问题及解决办法
Jul 15 Javascript
onmouseover事件和onmouseout事件全面理解
Aug 15 Javascript
微信JSAPI Ticket接口签名详解
Jun 28 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
Aug 09 Javascript
对vux点击事件的优化详解
Aug 28 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
vue element ui validate 主动触发错误提示操作
Sep 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原型模式
2014/11/25 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python数据结构之图的实现方法
2015/07/08 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python中协程用法代码详解
2018/02/10 Python
python 把列表转化为字符串的方法
2018/10/23 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Python imread、newaxis用法详解
2019/11/04 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
python能否java成为主流语言吗
2020/06/22 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
美工的岗位职责
2013/11/14 职场文书
财务负责人岗位职责
2015/02/03 职场文书
实习推荐信格式模板
2015/03/27 职场文书
旅行社计调工作总结
2015/08/12 职场文书
高中政治教师教学反思
2016/02/23 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技