AngularJS中的Directive实现延迟加载


Posted in Javascript onJanuary 25, 2016

所谓的延迟加载通常是:直到用户交互时才加载。如何实现延迟加载呢?

需要搞清楚三个方面:

1、html元素的哪个属性需要延迟加载?
2、需要对数据源的哪个字段进行延迟加载?
3、通过什么事件来触发延迟加载?

自定义的Directive的页面表现大致是这样:

<ul>
<li ng-repeat="cust in customers"
delay-bind="{{::cust.street}}"
attribute="title"
trigger="mouseenter">
<a delay-bind="{{::cust.url}}"
attribute="href"
trigger="mouseenter">
{{cust.name}}
</a>
</li>
</ul>
<div>Total Cusotmers: {{::customers.length}}</div>

以上,
● delay-bind表示要从数据源中取出的某个字段值
● attribute表是html元素属性,对该属性延迟赋值
● trigger表示通过那个事件来触发延迟加载

Directive代码大致如下:

//interpolate的存在允许one-time一次性绑定
(function(){
var delayBindWithCompile = ['$interpolate', function($interpolate){
var compile = fucntion(tElem, tAttrs){
//delay-bind="{{::cust.street}}"
//这里返回的是一个函数,也就相当于针对street属性的编译开始,相当于把编译的功能先缓存在这里
var interpolateFunc = $interpolate(tAttrs.delayBind);
//重新设置delayBind的属性值,这时候DOM还没有加载呢
tAttrs.$set('delayBind', null); //相当于清除属性值
return {
pre: function(scope, elem, attrs){
},
post: function(scope, elem, attrs){
//trigger="mouseenter"
elem.on(attrs.trigger, function(event){
//attribute="title" 这里title是表示真正要延迟更新的属性
var attr = atts.attribute,
val = interpolateFunc(scope); //编译真正执行
if(attr && !elem.attr(attr)){
elem.attr(attr, val);
}
});
}
}
};
return {
restrict: 'A',
compile: compile
}
}];
angular.module('directivesModule')
.directive('delayBind', delayBindWithCompile);
}());

以上,compile方法中用到了$interpolate服务,$interpolate这个服务首先可以通过$interpolate(tAttrs.delayBind)把数据源某个字段的属性值先编译缓存起来,在post-link,也就是这里的post函数中,当触发引起延迟加载的事件,再让$interpolate服务开始编译把值赋值给html元素的某个属性。

以上所述是针对AngularJS中的Directive实现延迟加载的相关内容,希望对大家有所帮助。

Javascript 相关文章推荐
基于jQuery的星级评分插件
Aug 12 Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 Javascript
IE下使用cloneNode注意事项分享
Nov 22 Javascript
js/jquery去掉空格,回车,换行示例代码
Nov 05 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
Jan 28 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
Nov 04 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
js浏览器html5表单验证
Oct 17 Javascript
微信小程序 flex实现导航实例详解
Apr 26 Javascript
JS实现上传图片实时预览功能
May 22 Javascript
详解TypeScript的基础类型
Feb 18 Javascript
AngularJS中的Directive自定义一个表格
Jan 25 #Javascript
理解JavaScript事件对象
Jan 25 #Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
Jan 25 #Javascript
学习JavaScript事件流和事件处理程序
Jan 25 #Javascript
javascript产生随机数方法汇总
Jan 25 #Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
Jan 25 #Javascript
理解JavaScript表单的基础知识
Jan 25 #Javascript
You might like
一个域名查询的程序
2006/10/09 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
Three.js基础学习教程
2017/11/16 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
英智兴达软件测试笔试题
2016/10/12 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
成功的酒店创业计划书
2013/12/27 职场文书
银行工作检查书范文
2014/01/31 职场文书
六五普法规划实施方案
2014/03/21 职场文书
个人委托书格式
2014/04/04 职场文书
护士节慰问信
2015/02/15 职场文书
学校会议通知范文
2015/04/15 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis