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 相关文章推荐
js显示时间 js显示最后修改时间
Jan 02 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
收集json解析的四种方法分享
Jan 17 Javascript
jQuery中offsetParent()方法用法实例
Jan 19 Javascript
简单的js计算器实现
Oct 26 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
Nov 22 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
bootstrap组件之按钮式下拉菜单小结
Jan 19 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
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序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
JS的反射问题
2010/04/07 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python基础教程项目三之万能的XML
2018/04/02 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
高校辅导员推荐信范文
2013/12/25 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
考察邀请函范文
2015/01/31 职场文书
民事辩护词范文
2015/05/21 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python
配置nginx负载均衡
2022/05/06 Servers