AngularJS中$watch和$timeout的使用示例


Posted in Javascript onSeptember 20, 2016

前言

相信使用过Angular的小伙伴应该对$watch这个监听不陌生,它主要用于监听模型的变化,当你的模型部分发生变化时它会通知你。我在最近的平台管理开发中,也用到这个牛逼哄哄的Angular,在做filter的时候不可以避免的用到$watch监听。当时我的想法就是搜索的时候不需要点击搜索按钮,这样在用户体验上也是极好的,避免了输入后再次点击的操作步骤。

然后,当$watch监听的时候一开始代码是这样的

$scope.$watch('filterOptions', function (newVal, oldVal) {
 if (newVal !== oldVal) {
 //filterOptions发生变化时,调用方法
 $scope.getPagedDataAsync('admin/bill/'+$stateParams.page+'?pageCount='+$scope.paginationConf.itemsPerPage,$scope.filterOptions);
 }
}, true);

这样做,看上去没什么大问题,每次输入的时候就拉一次数据。但是!但是!但是!重要的事情说三遍!当用户输入“张三”这个搜索字的时候,代码是这样执行的,“张”字拉了一次数据,“三”字有拉了一次数据。好了嘛,这还是两个字,要是输入十个字呢,服务器就哭了,服务器就来打前端了。

这个时候就需要用到Angular中的这货了——$timeout,他是angular中的一个定时器。针对我们搜索来说,我们在监听filterOptions发生变化时,不要马上请求,给他0.8秒的一个等待的时间,如果这0.8秒内filterOptions没有又一次发生变化,那么就请求拉数据,否则就继续输入。

代码如下:

$scope.$watch('filterOptions', function (newVal, oldVal) {
 if (newVal !== oldVal) {
  if (timeout) $timeout.cancel(timeout);
  timeout = $timeout(function() {
  $scope.getPagedDataAsync('admin/bill/'+$stateParams.page+'?pageCount='+$scope.paginationConf.itemsPerPage,$scope.filterOptions);
  }, 800);
 }
 }, true);

总结

以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JQuery的一些小应用收集
Mar 27 Javascript
cnblogs TagCloud基于jquery的实现代码
Jun 11 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
May 02 Javascript
用js来获取上传的文件名纯粹是为了美化而用
Oct 23 Javascript
js的延迟执行问题分析
Jun 23 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
Vue.js第四天学习笔记
Dec 02 Javascript
vue 实现通过手机发送短信验证码注册功能
Apr 19 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
Jul 20 Javascript
探索node之事件循环的实现
Oct 30 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
jQuery实现的网页换肤效果示例
Sep 20 #Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 #Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
Sep 20 #Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 #Javascript
关于Javascript中defer和async的区别总结
Sep 20 #Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 #Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 #Javascript
You might like
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
PHP中cookie知识点学习
2018/05/06 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
基于jquery的3d效果实现代码
2011/03/23 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python实现定时任务
2017/02/08 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
城市轨道专业个人求职信范文
2013/09/23 职场文书
怎样有效的进行自我评价
2013/10/06 职场文书
企业统计员岗位职责
2013/12/13 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
部队领导证婚词
2014/01/12 职场文书
保护环境建议书
2014/03/12 职场文书
社会实践活动总结范文
2014/07/03 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
担保书范本
2015/01/20 职场文书
入伍通知书
2015/04/23 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫