AngularJS中$watch和$timeout的使用示例  更新时间:2016年09月20日 11:45:58   投稿:daisy   这篇文章给大家介绍了AngularJS中$watch和$timeout的使用例子,通过示例代码相信更能让大家理解,有需要的朋友们下面来一起看看吧。 前言 相信使用过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); 总结 以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。 您可能感兴趣的文章: 详解AngularJS脏检查机制及$timeout的妙用 angularjs之$timeout指令详解 AngularJs定时器$interval 和 $timeout详解 AngularJS 的$timeout服务示例代码 angular $watch $timeout 相关文章 Angularjs中使用layDate日期控件示例 本篇文章主要介绍了Angularjs中使用layDate日期控件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-01-01 angular项目中bootstrap-datetimepicker时间插件的使用示例 这篇文章主要介绍了angular项目中bootstrap-datetimepicker时间插件的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-03-03 详解angular路由高亮之RouterLinkActive 这篇文章主要介绍了详解angular路由高亮之RouterLinkActive,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-04-04 使用Angular CLI从蓝本生成代码详解 这篇文章主要介绍了使用Angular CLI从蓝本生成代码详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-03-03 微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决 本文主要介绍微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决,这里提供了详细的操作方式,有需要的小伙伴可以参考下 2016-09-09 angularjs通过过滤器返回超链接的方法 这篇文章主要介绍了angularjs通过过滤器返回超链接的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-10-10 Angular+ionic实现折叠展开效果的示例代码 这篇文章主要介绍了Angular+ionic实现折叠展开效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 2020-07-07 Angular请求防抖处理第一次请求失效问题 这篇文章主要介绍了angular请求防抖及处理第一次请求失效的相关资料,需要的朋友可以参考下 2019-05-05 理解Angular数据双向绑定 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。这篇文章主要带着大家理解Angular数据双向绑定,感兴趣的小伙伴们可以参考一下 2016-01-01 详解AngularJS控制器的使用 这篇文章主要为大家详细介绍了AngularJS控制器的使用方法,感兴趣的小伙伴们可以参考一下 2016-03-03 最新评论

前言

相信使用过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);

总结

以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

您可能感兴趣的文章:

  • 详解AngularJS脏检查机制及$timeout的妙用
  • angularjs之$timeout指令详解
  • AngularJs定时器$interval 和 $timeout详解
  • AngularJS 的$timeout服务示例代码
张贴在3