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 相关文章推荐
HTML5附件拖拽上传drop & google.gears实现代码
Apr 28 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
jQuery实现新消息闪烁标题提示的方法
Mar 11 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
JS中的数组方法笔记整理
Jul 26 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
javascript面向对象创建对象的方式小结
Jul 29 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
Nov 05 Javascript
JS实现页面数据懒加载
Feb 13 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编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
初学Javascript的一些总结
2008/11/03 Javascript
Aptana调试javascript图解教程
2009/11/30 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
从零学Python之hello world
2014/05/21 Python
python实现批量修改文件名代码
2017/09/10 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
装饰资料员岗位职责
2013/12/30 职场文书
七年级英语教学反思
2014/01/15 职场文书
腾讯广告词
2014/03/19 职场文书
《云房子》教学反思
2014/04/20 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫