最近终于不忙了!!有时间沉淀一下之前学到的angular东东!!

angular路由想必大家已经不陌生了!(陌生的去看我之前那篇手把手教你配置angular路由!)
angular路由作为单页面应用,切换页面的时候都是一个页面,所以切换controller和按需加载控件js就成了大问题!!折腾了我半天啊,angular-route内置的办法也没有解决这个问题,最终我是用requireJs解决的这个问题!!上代码!
1.首先引入requireJs,并且在它的下面用闭包写配置 requirejs(['framework']),这句话的意思是首次进入页面,加载framework
<script src="js/lib/require.min.js"></script>
<script>
(function () {
var jsDir = '/js/';
var jsLibDir = '/js/lib/';
var jsComponentDir = '/components/';
var paths = {
angular: jsLibDir + 'angular.min',
angularRoute: jsLibDir + 'angular-route.min',
jquery: jsLibDir + 'jquery.min',
jQueryMD5: jsLibDir + 'jquery.md5',
highcharts: jsLibDir + 'highcharts',
radialProgress: jsLibDir + 'radialProgress',
d3: jsLibDir + 'd3.min',
echarts: jsLibDir + 'echarts',
framework: jsDir + 'framework',
angularUtil: jsDir + 'angular-util',
standardDashboard: jsDir + 'standard-dashboard',
standardConsole: jsDir + 'standard-console',
standardAmountStatistic: jsDir + 'standard-amount-statistic',
standardReport: jsDir + 'standard-report',
standardAdvancedReport: jsDir + 'standard-advanced-report',
standardExpertAnswer: jsDir + 'standard-expert-answer',
standardService: jsDir + 'standard-service',
standardStrategyInform: jsDir + 'standard-strategy-inform',
standardMember: jsDir + 'standard-member',
standardSchedule: jsDir + 'standard-schedule',
standardChannel: jsDir + 'standard-channel',
standardStrategyMerge: jsDir + 'standard-strategy-merge',
standardIntegrate: jsDir + 'standard-integrate',
standardPersonalCenter: jsDir + 'standard-personal-center',
dateTimePicker: jsComponentDir + 'dateTimePicker/date-time-picker',
fullCalendar: jsComponentDir + 'fullCalendar/fullcalendar',
moment: jsComponentDir + 'fullCalendar/moment'
};
requirejs.config({
paths: paths,
shim: {
angular: {
exports : 'angular',
deps: ['jquery']
},
angularRoute: {
deps: ['angular']
},
jQueryMD5: {
deps: ['jquery']
}
},
//urlArgs: "timeStamp=" + (new Date()).getTime()
//urlArgs: 'v=1.47.1&t=20160719'
});
requirejs(['framework']);
}());
</script>
2.framework.js作为首次加载的js,起到至关重要的作用哈!!定义frameworkApp模块作为主模块,另外加载公共服务utilmodel和ngRoute路由,定义一个resolveController方法,回调函数是requireJs,一会儿会讲到!
//引入模块
var frameworkApp = angular.module('FrameworkApp',['ngRoute', 'utilModule']);
//加载对应的controller
var resolveController = function (names, dependancies) {
//console.log(names)
//console.log(dependancies)
return {
loadController: ['$q', '$rootScope', function ($q, $rootScope) {
var defer = $q.defer();
require(names, function () {
defer.resolve();
$rootScope.$apply();
});
return defer.promise;
}]
};
};
3.配置路由,用resolve方法完成回调,注意回调的是一个list,值是步骤一中定义的模块名称
frameworkApp.config(['$routeProvider', '$controllerProvider', '$provide', '$compileProvider', '$filterProvider',
function ($routeProvider, $controllerProvider, $provide, $compileProvider, $filterProvider) {
frameworkApp.register = {
controller: $controllerProvider.register,
factory: $provide.factory,
service: $provide.service,
filter: $filterProvider.register,
directive: $compileProvider.directive
};
$routeProvider
.when('/',{
redirectTo: '/dashboard'
})
.when('/dashboard',{
templateUrl: 'dashboard.html',
controller: 'DashboardCtrl',
resolve: resolveController(['standardDashboard', 'd3','radialProgress','highcharts'])
})
.when('/console',{
templateUrl: 'console.html',
controller: 'ConsoleCtrl',
resolve: resolveController(['standardConsole'])
})
.when('/amountStatistic',{
templateUrl: 'amount-statistic.html',
controller: 'amountStatisticCtrl',
resolve: resolveController(['standardAmountStatistic','highcharts','dateTimePicker'])
})
.when('/report',{
templateUrl: 'report.html',
controller: 'ReportCtrl',
resolve: resolveController(['standardReport','dateTimePicker'])
})
.when('/advancedReport',{
templateUrl: 'advanced-report.html',
controller: 'advancedReportCtrl',
resolve: resolveController(['standardAdvancedReport','highcharts','dateTimePicker'])
})
.when('/expertAnswer',{
templateUrl: 'expert-answer.html',
controller: 'expertAnswerCtrl',
resolve: resolveController(['standardExpertAnswer'])
})
.when('/service',{
templateUrl: 'service.html',
controller: 'ServiceCtrl',
resolve: resolveController(['standardService'])
})
.when('/strategy-inform',{
templateUrl: 'strategy-inform.html',
controller: 'StrategyInformCtrl',
resolve: resolveController(['standardStrategyInform'])
})
.when('/member',{
templateUrl: 'member.html',
controller: 'MemberCtrl',
resolve: resolveController(['standardMember'])
})
.when('/schedule',{
templateUrl: 'schedule.html',
controller: 'ScheduleCtrl',
resolve: resolveController(['standardSchedule'])
})
.when('/channel',{
templateUrl: 'channel.html',
controller: 'ChannelCtrl',
resolve: resolveController(['standardChannel'])
})
.when('/strategy-merge',{
templateUrl: 'strategy-merge.html',
controller: 'StrategyMergeCtrl',
resolve: resolveController(['standardStrategyMerge'])
})
.when('/integrate',{
templateUrl: 'integrate.html',
controller: 'IntegrateCtrl',
resolve: resolveController(['standardIntegrate'])
})
.when('/personalCenter',{
templateUrl: 'personal-center.html',
controller: 'PersonalCenterCtrl',
resolve: resolveController(['standardPersonalCenter'])
})
.otherwise({
redirectTo: '/error'
});
}]);
4.大功告成啦~完成controller切换,和js按需加载!!!啦啦啦!
5.有一点我也没解决,在引入echarts的时候,用这种方法就报错了,换成highcharts就可以了,折腾半天啊也没把echarts引进来,不过到是发现,在require生效之前引入echarts的话,是可以的!求大神讲解啊!!
<!-- start build --> <script src="js/lib/echarts.js"></script> <script src="js/lib/require.min.js"></script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angular路由js加载
# requirejs
# 动态加载js
# angularjs
# 路由加载js
# angularJS+requireJS实现controller及directive的按需加载示例
# 探索angularjs+requirejs全面实现按需加载的套路
# JavaScript模块化之使用requireJS按需加载
# 加载
# 回调
# 首次
# 半天
# 按需
# 的是
# 都是
# 我是
# 这个问题
# 这句话
# 错了
# 大神
# 看我
# 大功告成
# 大问题
# 讲到
# 至关重要
# 会儿
# 解决这个问题
# 忙了
相关文章:
网站插件制作软件免费下载,网页视频怎么下到本地插件?
盘锦网站制作公司,盘锦大洼有多少5G网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
建站主机解析:虚拟主机配置与服务器选择指南
学校为何禁止电信移动建设网站?
定制建站价位费用解析与套餐推荐全攻略
如何在阿里云部署织梦网站?
如何在Windows服务器上快速搭建网站?
建站主机功能解析:服务器选择与快速搭建指南
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
如何在云虚拟主机上快速搭建个人网站?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何高效搭建专业期货交易平台网站?
金*站制作公司有哪些,金华教育集团官网?
如何高效利用200m空间完成建站?
活动邀请函制作网站有哪些,活动邀请函文案?
网站按钮制作软件,如何实现网页中按钮的自动点击?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何通过服务器快速搭建网站?完整步骤解析
C++如何使用std::optional?(处理可选值)
学校免费自助建站系统:智能生成+拖拽设计+多端适配
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何在IIS7上新建站点并设置安全权限?
如何在VPS电脑上快速搭建网站?
高端网站建设与定制开发一站式解决方案 中企动力
,如何利用word制作宣传手册?
如何通过主机屋免费建站教程十分钟搭建网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
建站主机如何安装配置?新手必看操作指南
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
黑客如何通过漏洞一步步攻陷网站服务器?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何快速查询网站的真实建站时间?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
建站主机选哪种环境更利于SEO优化?
建站之星如何开启自定义404页面避免用户流失?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在宝塔面板中修改默认建站目录?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
桂林网站制作公司有哪些,桂林马拉松怎么报名?
宝塔建站助手安装配置与建站模板使用全流程解析
网站制作壁纸教程视频,电脑壁纸网站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
*请认真填写需求信息,我们会在24小时内与您取得联系。