一、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 //事件绑定是否启用 }); });
更多: