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 实现模态对话框 源代码大全
May 02 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
ExtJs纵坐标值重复问题的解决方法
Feb 27 Javascript
javascript if条件判断方法小结
May 17 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
Jun 12 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
javascript中闭包(Closure)详解
Jan 06 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
uni-app实现点赞评论功能
Nov 25 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+javascript制作带提示的验证码源码分享
2014/05/28 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
Javascript之文件操作
2007/03/07 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python3离线安装Requests模块问题
2019/10/13 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
python 实现逻辑回归
2020/12/30 Python
什么是事务?为什么需要事务?
2012/01/09 面试题
教师自我反思材料
2014/02/14 职场文书
司机职责范本
2014/03/08 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
投资意向书
2014/07/30 职场文书
社保委托书怎么写
2014/08/02 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
材料采购员岗位职责
2015/04/03 职场文书
团委副书记工作总结
2015/08/14 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL