AngularJS ocLazyLoad按需加载控制器/js文件的延迟加载(一)

前端之家收集整理的这篇文章主要介绍了AngularJS ocLazyLoad按需加载控制器/js文件的延迟加载(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、ocLazyLoad说明

1.ocLazyLoad是AngularJS的第三方库,可以实现模块、控制器及其他依赖的动态加载/按需加载

2.$ocLazyLoad.load()支持多个文件,可以自定义指定文件类型,可以自定义指定是否缓存在客户端

3.存在问题,$ocLazyLoad.load(),返回动态类型$$state,对于js文件不存在或加载失败还没有找到相关处理的api

二、相关链接

Git源代码地址:https://github.com/ocombe/ocLazyLoad

官方网址:https://oclazyload.readme.io

官方Api文档:https://oclazyload.readme.io/docs

三、实例1,在控制器中动态加载模块

1.引用

<script src="../Scripts/jquery-1.10.2.min.js"></script>
<script src="../Scripts/Angular/angular.min.js"></script>
<script src="../Scripts/Angular/ocLazyLoad.min.js"></script>
<script src="../Scripts/Angular/angular-ui-router.min.js"></script>
    <h3>Lazy load测试</h3>
    <div id="example" ng-app="myApp" ng-controller="TestController"></div>

2.js
angular.module('myApp',['oc.lazyLoad'])
.controller('TestController',function ($scope,$ocLazyLoad,$compile) {
    //动态加载模块
    $ocLazyLoad.load('../scripts/myjs/module1.js').then(function () {
        var el,elToAppend;
        elToAppend = $compile('<say-hello to="world"></say-hello>')($scope);
        el = angular.element('#example');
        el.append(elToAppend);
        console.log('加载成功');
    },function (e) {
        console.log('加载失败');
        console.error(e);
    });
});
四、实例2,在控制器中动态加载其他依赖

1.html

<div class="container" ng-app="myApp" ng-controller="myCtrl">
    <ul class="nav nav-pills">
        <li role="presentation"><a href="#/home">首页</a></li>
        <li role="presentation"><a href="#/about">关于页面</a></li>
    </ul>
    <div class="panel panel-danger">
        <div class="panel-heading">
            <div class="panel-title">模板内容</div>
        </div>
        <div class="panel-body" ui-view></div>
    </div>
</div>
2.js
//动态加载依赖文件
var app = angular.module('myApp',['ui.router','oc.lazyLoad']);
app.config(function ($stateProvider,$urlRouterProvider) {
    $stateProvider.state('index',{
        url: '',templateProvider: function () {
            return '<h1>这是首页</h1>';
        }
    });
});
app.controller('myCtrl',$ocLazyLoad) {
    //在controller中动态加载依赖
    $ocLazyLoad.load([
        "../Content/bootstrap.min.css",{
            files: ["../Scripts/jquery-1.10.2.min.js"],cache: true
        }
    ]);
});
五、实例3,全局配置+路由处理

1.模板同上

2.js

var app = angular.module('myApp',['oc.lazyLoad','ui.router']);
//配置路由
app.config(function ($stateProvider,$urlRouterProvider,$ocLazyLoadProvider) {
    $stateProvider.state('index',//templateUrl: '/template/home.html',templateProvider: function () {
            return '<h1>这是首页</h1>';
        },resolve: {
            des: function ($ocLazyLoad) {
                //var ctrl = $ocLazyLoad.load('/scripts/myjs/home.js');
                var ctrl = $ocLazyLoad.load([
                    {
                        files: '/scripts/myjs/none.js',cache: true //指定是否启用缓存
                    }
                ]);
                console.info(ctrl);
                //此处可以对加载失败的js文件处理
                //console.info(typeof ctrl.$$state);
                // console.info(ctrl.$$state);
                //$$state 是动态类型,没法直接获取属性和值
                if (ctrl.$$state.status == 2)
                    return undefined;
                return ctrl;
            }
        }
    });
    //全局配置
    $ocLazyLoadProvider.config({
        debug: true,//知否启用调试模式
        events:true  //事件绑定是否启用
    });
});

更多:

AngularJS 动态加载控制器实例-ocLoazLazy(二)

AngularJS路由之ui-router(一)

猜你在找的Angularjs相关文章