<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootswatch/2.3.1/spruce/bootstrap.min.css">
<script src="libs/angular/angular.js" type="text/javascript" charset="utf-8"></script>
<script src="libs/angular-route/angular-ui-router.js" type="text/javascript" charset="utf-8"></script>
<!--<script src="dragon-drop.js" type="text/javascript" charset="utf-8"></script>--> <!--//使用按需加载 angular模块,注意怎么注入 ,dragdrop.js是拖拽的功能插件-->
<script src="ocLazyLoad.min.js" type="text/javascript" charset="utf-8"></script>
<style type="text/css">
.active{
color:red;
font-size: 30px;
}
[btf-dragon] {
padding: 20px;
border: 1px solid red;
}
</style>
</head>
<body ng-app='app' ng-controller='controller'>
<a ui-sref='page1' href='' ng-click='change(1)' ng-class='{"active":num == 1}'>页面1</a>
<a ui-sref='page2' ng-click='change(2)' ng-class='{"active":num == 2}'>页面2</a>
<a ui-sref='temp' ng-click='change(3)' ng-class='{"active":num == 3}'>页面temp</a> //点击此页面加载jquery和dragdrop.js
<h1 ui-view></h1>
<script type="text/ng-template" id='temp.html' > //ng-template 相当于新建的html文件
<div id="" ng-controller='temp'>
<h2 >通过oclazyload来按需加载jquery,来alert $('h2').html()的值</h2> //jquery成功加载后执行 alert($('h2').html())验证是否成功
<div class="row">
<div class="span6">
<h3>Things</h3>
<div btf-dragon="thing in things">{{thing}}</div>
</div>
<div class="span6">
<h3>Other Things</h3>
<div btf-dragon="thing in otherThings" style="cursor: pointer;overflow: visible;">{{thing}}</div>
</div>
</div>
</div>
</script>
<script type="text/javascript">
var app=angular.module('app',['ui.router','oc.lazyLoad']);
app.constant('angular_module',[ //angular 插件 因为需要注入模块所以和jquery的加载方式不同
{
name:'btford.dragon-drop', //模块注入名称,一定是插件注入 等价于 angular.module('app',['btford.drag-drop'])
files:['dragon-drop.js'] //files:中是会执行的js插件,这里可以放很对jquery插件,但只能放一个angular插件,因为只注入了一个模板。此处也可以放入css文件。如files:['dragon-drop.js','jquery.js','jquery.css'];
}
]);
app.constant('jquery_module',{
jquery:['http://libs.baidu.com/jquery/2.0.0/jquery.min.js'] //jquery插件加载定义方式。
});
/* app.config(function ($ocLazyLoadProvider,angular_module){
$ocLazyLoadProvider.config({
debug:false,
events:false,
modules:angular_module
});
});*/
app.config(function($stateProvider,$urlRouterProvider,angular_module,jquery_module){
$urlRouterProvider.when('','/page1');
$stateProvider.state('page1',{
url:'/page1/:id',
templateUrl:"page1.html",
}).state('page2',{
url:'/page2',
templateUrl:"page2.html"
}).state('temp',{
url:'/temp',
templateUrl:"temp.html",
resolve:{ //resolve执行完之后才会去加载template和controller函数,resolve是个对象,里面的任何定义的方法都会在加载时被执行。
loadMyCtrl: ['$ocLazyLoad','angular_module','jquery_module' ,function($ocLazyLoad,angular_module,jquery_module){
return $ocLazyLoad.load([angular_module[0],jquery_module.jquery]); //angular插件加载的形式为一个包含name和files的对象。其他不需要注入模板的插件以字符串路径或数组的形式加载。如:['jquery.js',['jquery.js']];
}]
}
});
});
app.controller('controller',function($stateParams,$scope,$state){
$scope.change=function(num){
$scope.num=num;
};
});
app.controller('page1',function($stateParams,$scope){
$scope.change(1);
});
app.controller('page2',function($stateParams,$scope){
$scope.change(2);
});
app.controller('temp',function($stateParams,$scope,$ocLazyLoad){
$scope.change(3);
$scope.things = ['one', 'two', 'three'];
$scope.otherThings = [];
alert($('h2').html()); //这里是验证jquery是否正确加载。
});
</script>
</body>
</html>
好处就是解决angular大型项目开发,作为单页面的angular不能一次性加载全部的文件,会严重影响网站的响应时间。最好做按需加载的文件配置。如下:
扩展:oclazyload按需加载,也可以放在对应页面的控制器里进行加载,也许你会认为省了很多配置,这样反而会更省事。加载操作:
结果:
自己分析吧。