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 URL锚点取值方法
Feb 25 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
bootstrap datetimepicker2.3.11时间插件使用
Nov 19 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
Dec 08 Javascript
Vue.js仿Metronic高级表格(一)静态设计
Apr 17 Javascript
JavaScript瀑布流布局实现代码
May 06 Javascript
BootStrap的两种模态框方式
May 10 Javascript
深入理解Vue transition源码分析
Jul 30 Javascript
vue使用pdfjs显示PDF可复制的实现方法
Dec 14 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
vue实现信息管理系统
May 30 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
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封装单文件上传到数据库(路径)
2017/10/15 PHP
禁止IE用右键的JS代码
2013/12/30 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
Python列表计数及插入实例
2014/12/17 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
解决python报错MemoryError的问题
2018/06/26 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Python tornado上传文件的功能
2020/03/26 Python
numpy库reshape用法详解
2020/04/19 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
求职自我推荐信
2014/06/25 职场文书
企业消防安全责任书
2014/07/23 职场文书
关于环保的活动方案
2014/08/25 职场文书
劳动仲裁调解书
2015/05/20 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery