一、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>
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', function ($scope, $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', {
url: '',
//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 //事件绑定是否启用
});
});