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重要知识更新
Jul 08 Javascript
Javascript 获取滚动条位置等信息的函数
Sep 08 Javascript
jquery应该如何来设置改变按钮input的onclick事件
Dec 10 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
Dec 19 Javascript
AngularJS之依赖注入模拟实现
Aug 19 Javascript
Bootstrap对话框使用实例讲解
Sep 24 Javascript
js实现自定义路由
Feb 04 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
jQuery中的on与bind绑定事件区别实例详解
Feb 28 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
Aug 31 Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 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 xp下安装pear
2006/12/02 PHP
PHP安全防范技巧分享
2011/11/03 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python深入学习之上下文管理器
2014/08/31 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python实现三维拟合的方法
2018/12/29 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
幼儿园开学家长寄语
2014/01/19 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
旷课检讨书范文
2015/01/27 职场文书
民事二审代理词
2015/05/25 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
科普 | 业余无线电知识-波段篇
2022/02/18 无线电