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 相关文章推荐
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
Jan 11 Javascript
JS关键字变色实现思路及代码
Feb 21 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
Sep 04 Javascript
Jquery实现仿京东商城省市联动菜单
Nov 19 Javascript
返回函数的JavaScript函数
Jun 14 Javascript
利用JavaScript如何查询某个值是否数组内
Jul 30 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
Electron 调用命令行(cmd)
Sep 23 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
Nov 20 Javascript
Vue基本指令实例图文讲解
Feb 25 Vue.js
jQuery实现影院选座订座效果
Apr 13 jQuery
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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
Array对象方法参考
2006/10/03 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
angularJS 入门基础
2015/02/09 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
Python编写登陆接口的方法
2017/07/10 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
GWT都有什么特性
2016/12/02 面试题
软件研发工程师岗位职责
2014/09/30 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
pandas求平均数和中位数的方法实例
2021/08/04 Python