AngularJS中$watch和$timeout的使用示例
程序员文章站
2022-10-18 16:41:46
前言
相信使用过angular的小伙伴应该对$watch这个监听不陌生,它主要用于监听模型的变化,当你的模型部分发生变化时它会通知你。我在最近的平台管理开发中,也用到这个...
前言
相信使用过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);
总结
以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。
推荐阅读
-
Python中@property的理解和使用示例
-
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
-
Python中@property的理解和使用示例
-
Shell中set与shopt命令选项的含义和使用示例
-
AngularJs中route的使用方法和配置
-
Angularjs使用ng-repeat中$even和$odd属性的注意事项
-
node.js中process进程的概念和child_process子进程模块的使用方法示例
-
vue.js中ref和$refs的使用及示例讲解
-
AngularJS中$watch和$timeout的使用示例
-
CSS3中HSL和HSLA的简单使用示例