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 相关文章推荐
Ext grid 添加右击菜单
Nov 26 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
Javascript调用函数方法的几种方式介绍
Mar 20 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
Google 地图控件集详解及实例代码
Aug 06 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
Oct 30 Javascript
红黑树的插入详解及Javascript实现方法示例
Mar 26 Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
Jun 20 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 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上传图片之时间戳命名(保存路径)
2014/08/15 PHP
php递归实现无限分类的方法
2015/07/28 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python实现在线音乐播放器
2017/03/03 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
python实现人机猜拳小游戏
2020/02/03 Python
Python实现像awk一样分割字符串
2020/09/15 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
半年思想汇报
2013/12/30 职场文书
英语简历自我评价
2014/01/26 职场文书
工程质量承诺书
2014/03/27 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS