AngularJS延迟加载html template


Posted in Javascript onJuly 27, 2016

当使用AngularJs中的routes/views模式建立大型网站或者应用的时候,把所有的自定义文件,如controllers和template等在初始化时全部加载进来,不是一个好的办法。最好的方式是,初始化时仅仅加载所需要的文件。这些文件可能会依赖一个连接或者多个文件,然而它们仅仅被特定的route所使用。当我们切换route时,未被加载的文件将会按需加载。这不但能提高初始化页面的速度,而且可以防止带宽浪费。

网上大部分文章都在讲通过$routeProvider以及第三方服务对controller的延迟加载,譬如:按需加载 AngularJS 的 Controller 就讲解的很详细。但是,很少有关于用$stateProvider对controller、html/template的延迟加载的文章。尽管对查看了$stateProvider相关的很多源代码,虽然解决了html/template的延迟加载问题,但是依然没有解决controller的延迟加载问题, 遗憾。由于时间问题,先将调查结果整理一下,等以后继续调查。

关于html/template的延迟加载,需要将html文件与home page文件放置于不同目录,否则会被自动加载进去。同样,也不能用templateUrl进行文件指定,否则也会被自动加载进去。 $stateProvider.state 的 template属性支持字符串值和函数,所以可以定义一个函数进行html文件的加载并缓存,防止重复加载文件。本想controller做同样处理,可惜报找不到controller函数定义,尝试很多方法都无效,等以后研究源代码看看漏掉了什么。直接上代码,逻辑不复杂,就不多??铝恕?br />

// 记录加载过的html以及controller,防止重复网络加载
$ionic.files = {html: {}, controller: {}};
// 声明延迟加载html方法
$ionic.getHtml = function getHtml(name) {
if (!$ionic.files.html[name]) {
// 同步ajax请求加载html,并缓存
$ionic.files.html[name] = jQuery.ajax({url: 'views/' + name + ".html", async: false}).responseText;
}
return $ionic.files.html[name];
}
// 声明延迟加载js方法 function resolveController(name) {
// var fn = $.getScript('assets/controller/' + name + '.js');
jQuery.ajax({"url": 'assets/controller/' + name + '.js', "dataType": "script", "async": false});
// console.log("load " + name);
return name;
} 
$stateProvider.state('login', {
url : "/login",
controller : resolveController("loginController"), 
template : function() { return $ionic.getHtml("login"); }
});

以上所述是小编给大家介绍的AngularJS延迟加载html template的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript toFixed() 方法
Apr 15 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 Javascript
jQuery AjaxQueue改进步骤
Oct 06 Javascript
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
onmouseover和onmouseout的一些问题思考
Aug 14 Javascript
js动画效果制件让图片组成动画代码分享
Jan 14 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
Jul 29 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
AngularJS入门教程之控制器详解
Jul 27 #Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
Jul 27 #Javascript
AngularJS入门教程之Scope(作用域)
Jul 27 #Javascript
AngularJS入门之动画
Jul 27 #Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 #Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 #Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 #Javascript
You might like
php反弹shell实现代码
2009/04/22 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
Python实现两个list对应元素相减操作示例
2017/06/09 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
django queryset相加和筛选教程
2020/05/18 Python
Django如何实现防止XSS攻击
2020/10/13 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
python实现xml转json文件的示例代码
2020/12/30 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
为什么需要版本控制
2016/10/28 面试题
社区八一活动方案
2014/02/03 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
心灵点滴观后感
2015/06/02 职场文书