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的多标签实现代码
Sep 19 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
Jun 20 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 Javascript
CSS3+JavaScript实现翻页幻灯片效果
Jun 28 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
微信小程序promsie.all和promise顺序执行
Oct 27 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
10款实用的PHP开源工具
2015/10/23 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
jQuery链使用指南
2015/01/20 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
Django rest framework工具包简单用法示例
2018/07/20 Python
Python3+Appium安装使用教程
2019/07/05 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
生产车间班组长岗位职责
2014/01/06 职场文书
英语道歉信范文
2014/01/09 职场文书
科级干部考察材料
2014/02/15 职场文书
绿色小区申报材料
2014/08/22 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
初中信息技术教学计划
2015/01/22 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
义诊活动通知
2015/04/24 职场文书
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python