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 相关文章推荐
javascript removeChild 使用注意事项
Apr 11 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
js防止页面被iframe调用的方法
Oct 30 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
使用Raygun来自动追踪AngularJS中的异常
Jun 23 Javascript
基于jQuery实现页面搜索功能
Mar 26 Javascript
Javascript动画效果(3)
Oct 11 Javascript
React创建组件的三种方式及其区别
Jan 12 Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
详解vue中axios的使用与封装
Mar 20 Javascript
Vue实现下拉加载更多
May 09 Vue.js
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双引号中访问数组元素报错的解决方法
2018/02/01 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Python3.9新特性详解
2020/10/10 Python
python 元组和列表的区别
2020/12/30 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
web页面录屏实现
2019/02/12 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
环保专业大学生职业规划设计
2014/01/10 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
教师党员自我评价范文
2015/03/04 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
Mysql开启外网访问
2022/05/15 MySQL