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的页面划词搜索JS
Sep 14 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 Javascript
javascript刷新父页面的各种方法汇总
Sep 03 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
JS前端笔试题分析
Dec 19 Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 Javascript
Angularjs按需查询实例代码
Oct 30 Javascript
JS中的BOM应用
Feb 02 Javascript
详解基于vue-cli3快速发布一个fullpage组件
Mar 08 Javascript
微信小程序系列之自定义顶部导航功能
May 21 Javascript
原生javascript中this几种常见用法总结
Feb 24 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php 前一天或后一天的日期
2008/06/28 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
新手如何快速理解js异步编程
2019/06/24 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
使用Python生成url短链接的方法
2015/05/04 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
python实现xlsx文件分析详解
2018/01/02 Python
django 将model转换为字典的方法示例
2018/10/16 Python
python 动态调用函数实例解析
2019/10/21 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
20年同学聚会感言
2014/02/03 职场文书
结婚喜宴主持词
2014/03/14 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
vue封装数字翻牌器
2022/04/20 Vue.js