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 相关文章推荐
lib.utf.js
Aug 21 Javascript
javascript 表单规则集合对象
Jul 21 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
js如何实现淡入淡出效果
Nov 18 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
Dec 29 Javascript
vue单个组件实现无限层级多选菜单功能
Apr 10 Javascript
vue实现中部导航栏布局功能
Jul 30 Javascript
Vue切换div显示隐藏,多选,单选代码解析
Jul 14 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
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
PHP递归算法的简单实例
2019/02/28 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python松散正则表达式用法分析
2016/04/29 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
django 创建过滤器的实例详解
2017/08/14 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
python实现超市商品销售管理系统
2019/10/25 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
新大陆软件面试题
2016/11/24 面试题
党员教师四风问题对照检查材料
2014/09/26 职场文书
2015年入党决心书
2015/02/05 职场文书
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS