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 相关文章推荐
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
js中的this关键字详解
Sep 25 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 jQuery
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
Mar 26 Javascript
详解小程序退出页面时清除定时器
Apr 28 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
Sep 04 Javascript
JavaScript实现显示和隐藏图片
Apr 29 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验证码类
2016/05/15 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
php实现登陆模块功能示例
2016/10/20 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP实现的日历功能示例
2018/09/01 PHP
javascript &&和||运算法的另类使用技巧
2009/11/28 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python中urllib模块用法实例详解
2014/11/19 Python
Python pickle模块用法实例
2015/04/14 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
简单了解Django模板的使用
2017/12/20 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
建筑工地门卫岗位职责
2014/04/30 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
运动会主持词大全
2015/07/02 职场文书
公司宣传语大全
2015/07/13 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书