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 相关文章推荐
Firebug 字幕文件JSON地址获取代码
Oct 28 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
基于iframe实现类似于ajax的页面无刷新
May 31 Javascript
JavaScript中setUTCFullYear()方法的使用简介
Jun 12 Javascript
CSS3 3D 技术手把手教你玩转
Sep 02 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
详解Angular2 关于*ngFor 嵌套循环
May 22 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 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下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
JavaScript库 开发规则
2009/01/31 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
2013/02/25 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
Python中的下划线详解
2015/06/24 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python 占位符的使用方法详解
2019/07/10 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
Linux操作面试题
2012/05/16 面试题
假日旅行社实习自我鉴定
2013/09/24 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
2014年党务公开方案
2014/05/08 职场文书
班组长安全工作职责
2014/07/15 职场文书
领导干部考核评语
2015/01/04 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers