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 相关文章推荐
javascript void(0)的妙用
Oct 21 Javascript
Javascript代码在页面加载时的执行顺序介绍
May 03 Javascript
JavaScript instanceof 的使用方法示例介绍
Oct 23 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
详解axios在node.js中的post使用
Apr 27 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
对VUE中的对象添加属性
Sep 18 Javascript
如何用JS模拟实现数组的map方法
Jul 30 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 过滤器实现代码
2010/08/09 PHP
PHP面向对象法则
2012/02/23 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
轻松实现php文件上传功能
2017/02/17 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
35个Python编程小技巧
2014/04/01 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Django发送邮件功能实例详解
2019/09/02 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
查看keras的默认backend实现方式
2020/06/19 Python
Python 爬虫性能相关总结
2020/08/03 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
求职简历中个人的自我评价
2013/12/01 职场文书
演讲稿开场白台词
2014/08/25 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
优质服务标语口号
2015/12/26 职场文书
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js