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 实用小技巧
Apr 07 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
JQuery for与each性能比较分析
May 14 Javascript
一个Action如何调用两个不同的方法
May 22 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
Jun 08 Javascript
基于原生JS实现图片裁剪
Aug 01 Javascript
Angularjs 设置全局变量的方法总结
Oct 20 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
Dec 08 Javascript
Vue的Flux框架之Vuex状态管理器
Jul 30 Javascript
Vue 重置组件到初始状态的方法示例
Oct 10 Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 Javascript
Vue 子组件与数据传递问题及注意事项
Jul 11 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编写的SVN类
2013/07/18 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
基于Python函数和变量名解析
2019/07/19 Python
解决Django连接db遇到的问题
2019/08/29 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
司机的工作范围及职责
2013/11/13 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
公司授权委托书范本
2014/09/18 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
社区党务工作总结2015
2015/05/19 职场文书
大学生入党自传2015
2015/06/26 职场文书
Python的三个重要函数详解
2022/01/18 Python