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 相关文章推荐
js 获取和设置css3 属性值的实现方法
May 06 Javascript
两个数组去重的JS代码
Dec 04 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
javascript面向对象程序设计(一)
Jan 29 Javascript
JavaScript动态检验密码强度的实现方法
Nov 09 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
Vue.js自定义事件的表单输入组件方法
Mar 08 Javascript
浅谈Angular6的服务和依赖注入
Jun 27 Javascript
JavaScript实现无限级递归树的示例代码
Mar 29 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
vue实现表格合并功能
Dec 01 Vue.js
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
一个简单计数器的源代码
2006/10/09 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
菜单效果
2006/10/14 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
vuex与组件联合使用的方法
2018/05/10 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
virtualenv介绍及简明教程
2020/06/23 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
普师专业个人自荐信范文
2013/11/26 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
求职信的正确写法
2014/07/10 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
英文慰问信范文
2015/03/24 职场文书
2015年实习单位评语
2015/03/25 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
javascript实现计算器功能详解流程
2021/11/01 Javascript