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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
一个tab标签切换效果代码
Mar 27 Javascript
chrome下img加载对height()的影响示例探讨
May 26 Javascript
js判断鼠标左、中、右键哪个被点击的方法
Jan 27 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
jQuery实现返回顶部功能
Feb 23 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
jquery绑定事件 bind和on的用法与区别分析
May 22 jQuery
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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
给ECShop添加最新评论
2015/01/07 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
laravel学习教程之存取器
2016/07/30 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
Web开发之JavaScript
2012/03/29 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
python中使用psutil查看内存占用的情况
2018/06/11 Python
Python3爬虫学习入门教程
2018/12/11 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
python之拟合的实现
2019/07/19 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
python三引号如何输入
2020/07/06 Python
百日安全活动总结
2014/05/04 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
入党群众意见范文
2015/06/02 职场文书
十七岁的单车观后感
2015/06/12 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书