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 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
js实现瀑布流的一种简单方法实例分享
Nov 04 Javascript
详解js闭包
Sep 02 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
Aug 25 Javascript
简单实现JS倒计时效果
Dec 23 Javascript
JQuery ZTree使用方法详解
Jan 07 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 Javascript
微信小程序实现定位及到指定位置导航的示例代码
Aug 20 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
关于Javascript闭包与应用的详解
Apr 22 Javascript
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
PHP获取网站域名和地址的代码
2008/08/17 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
python查询sqlite数据表的方法
2015/05/08 Python
python处理按钮消息的实例详解
2017/07/11 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
结婚邀请函范文
2014/01/14 职场文书
教师产假请假条
2014/04/10 职场文书
司机岗位职责说明书
2014/07/29 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
电工生产实习心得体会
2016/01/22 职场文书
学校教代会开幕词
2016/03/04 职场文书
python实现简单的井字棋
2021/05/26 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL