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生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
取选中的radio的值
Jan 11 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
Sep 12 Javascript
JS 操作Array数组的方法及属性实例解析
Jan 08 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
JavaScript中用toString()方法返回时间为字符串
Jun 12 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
微信小程序dom操作的替代思路实例分析
Dec 06 Javascript
JavaScript多种页面刷新方法小结
Apr 04 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
新闻分类录入、显示系统
2006/10/09 PHP
php获得文件扩展名三法
2006/11/25 PHP
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
python xml解析实例详解
2016/11/14 Python
Python 处理图片像素点的实例
2019/01/08 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
python判断链表是否有环的实例代码
2020/01/31 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python