AngularJS中的按需加载ocLazyLoad

欢迎大家讨论与指导 : )

  初学者,有不足的地方希望各位指出

  一、前言

    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模块

  

时间: 2024-10-10 16:16:49

AngularJS中的按需加载ocLazyLoad的相关文章

【实例分解二】angularjs根据路由按需加载Controller

开始笔记之前,把早上检测到的angularjs中的命名问题做一下记录. 检测工具:google浏览器扩展工具angularJS,结果如下: angularjs中,module要遵守lowerCamelCase原则,例:"myApp"; controller要遵守UpperCamelCase原则并且要以Controller结尾,例:"MainController". 这一篇笔记主要对angularjs根据路由按需加载Controller的操作进行了说明,也就是上一篇中

.NET中的按需加载/延迟加载 Lazy&lt;T&gt;

业务场景: 在项目开发中,经常会遇到特定的对象使用的加载问题,有的实例对象我们创建之后并非需要使用,只是根据业务场景来调用,所以可能会导致很多无效的实例加载 延迟初始化出现于.NET 4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求.也可以称为,按需加载 代码事例: 1.未进行延迟加载的情况 a.创建学生类: b.程序入口: c.运行结果: d.结果说明: 程序运行直接调用了构造函数,在使用Student对象之前 2.使用延迟加载 a.创建学生类:(代码如上1) b.程序入口: usi

vue中路由按需加载的几种方式

使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import Boy from '@/components/Boy' import Girl from '@/components/Girl' 普通加载的缺点: webpack在打包的时候会把整个路由打包成一个js文件,如果页面一多,会导致这个文件非常大,加载缓慢 1.require.ensure()实现按需加载

AngularJS中如果ng-src 图片加载失败怎么办

我们知道AngularJS加载图片的方法是用加ng-src标签,例如: <img ng-src="{{currentUrl}}"/> 其中currentUrl为图片地址,如果图片正常能显示,那这么使用一点问题没有,但是,如果图片加载失败了(例如该图片已经不存在,从而出现404错误),在该放图片的地方就会出现一个难看的图片加载失败图标,如果想把这个图标换成你自定义的图片,可以如下这么做: HTML: <img ng-src="{{currentUrl}}&qu

react-router的3种按需加载介绍

react-router的3种按需加载介绍:https://blog.csdn.net/jackTesla/article/details/80792110 react-router的按需加载(推荐第三种) 第一种: 利用react-loadable这个高级组件,要做到实现按需加载这一点,我们将使用的WebPack,babel-plugin-syntax-dynamic-import和react-loadable. webpack内置了对动态导入的支持; 但是,如果使用Babel(将JSX编译为

angularjs ocLazyLoad分步加载js文件,angularjs ocLazyLoad按需加载js

用angular有一段时间了,平日里只顾着写代码,没有注意到性能优化的问题,而今有时间,于是捋了捋,讲学习过程记录于此: 问题描述:由于采用angular做了网页的单页面应用,需要一次性在主布局中将所有模块需要引用到的js都引入.对于比较小的项目,这是可行的,但是对于大的项目,一旦js文件较多,在页面首次加载时就引入所有js文件,无疑会延缓页面加载的速度,造成不良额用户体验.那么分布加载(按需加载)就显得很有必要了. <!DOCTYPE html> <html lang="en

AngularJS 进阶(一) 按需加载controller js (转帖)

我们在AngularJS中可以根据网址不同直接切换view,动态加载网页模板,但是控制模板的控制器需要先定义好才可以,不能和网页模板同时加载,这样就造成整个网站的JS都要先加载完成. requireJS是大家第一个想到的东西,但是体积有点大,github上就有个人用它写了Angular的动态加载controller模块,是通过js promise异步编程技术实现的,最后的解决很简单~~ 首先在$routeProvider里面加resolve属性 $routeProvider. when('/ph

使用babel-plugin-import实现antd组件库中的组件按需加载

Ant Design是蚂蚁金服基于react实现的一个UI 设计库,基于 npm + webpack + babel 的工作流,支持 ES2015.babel-plugin-import 可以从组件库中仅仅引入需要的模块,而不是把整个库都引入,从而提高性能. 如果使用 import { Button } from 'antd'; 的写法会引入 antd 下所有的模块. 为了提高打包编译的速度和浏览器下载资源的速度,可以通过以下的写法来只加载需要的组件: import Button from 'a

react 中使用import()实现按需加载报错 解决方法 --‘import’ and ‘export’ may only appear at the top level

因为项目需要搞一下按需加载,使用import实现代码打包分片按需加载,但是在实际使用中报语法错误.报错信息如下 SyntaxError: 'import' and 'export' may only appear at the top level 啊咧?报错了. 查找发现很多人碰到过,解决方法不同,但是我这个报错适用下边这个方法. npm install --save-dev babel-plugin-syntax-dynamic-import 然后调整babel-loader配置如下: use