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 相关文章推荐
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
jquery 表单取值常用代码
Dec 22 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
jQuery中get()方法用法实例
Dec 27 Javascript
JavaScript 学习笔记之基础中的基础
Jan 13 Javascript
无刷新上传文件并返回自定义值
Jun 11 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 Javascript
jquery实现多次上传同一张图片
Jan 09 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
Feb 10 Javascript
关于js对textarea换行符的处理方法浅析
Aug 03 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 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增删改查示例自己写的demo
2013/09/04 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
python+pygame简单画板实现代码实例
2017/12/13 Python
Python3实现定时任务的四种方式
2019/06/03 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
西尔斯百货官网:Sears
2016/09/06 全球购物
校长就职演讲稿
2014/01/06 职场文书
护士自我鉴定怎么写
2014/02/07 职场文书
万年牢教学反思
2014/02/15 职场文书
党支部综合考察材料
2014/05/19 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
课外活动实习计划
2015/01/19 职场文书
民间借贷借条范本
2015/05/25 职场文书
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python