博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angular.js和vue.js中实现函数去抖(debounce)
阅读量:6266 次
发布时间:2019-06-22

本文共 1935 字,大约阅读时间需要 6 分钟。

问题描述

搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等。

学过电子电路的同学应该知道按键防抖。原理是一样的:就是说当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间。本文将分别探讨在angular.js和vue.js中如何实现对用户输入的防抖。

angular.js中解决方案

把去抖函数写成一个service,方便多处调用:

.factory('debounce', ['$timeout','$q', function($timeout, $q) {    // The service is actually this function, which we call with the func    // that should be debounced and how long to wait in between calls    return function debounce(func, wait, immediate) {      var timeout;      // Create a deferred object that will be resolved when we need to      // actually call the func      var deferred = $q.defer();      return function() {        var context = this, args = arguments;        var later = function() {          timeout = null;          if(!immediate) {            deferred.resolve(func.apply(context, args));            deferred = $q.defer();          }        };        var callNow = immediate && !timeout;        if ( timeout ) {          $timeout.cancel(timeout);        }        timeout = $timeout(later, wait);        if (callNow) {          deferred.resolve(func.apply(context,args));          deferred = $q.defer();        }        return deferred.promise;      };    };  }])

调用方法,在需要使用该功能的controller/directive中注入debounce,也要注入$watch,然后:

$scope.$watch('searchText',debounce(function (newV, oldV) {   console.log(newV, oldV);   if (newV !== oldV) {       $scope.getDatas(newV);   }}, 350));

大功告成!

Vue.js中的解决方案

首先在公共函数文件中注册debounce

export function debounce(func, delay) {  let timer  return function (...args) {    if (timer) {      clearTimeout(timer)    }    timer = setTimeout(() => {      func.apply(this, args)    }, delay)  }}

然后在需要使用的组件中引入debounce,并且在created生命周期内调用:

created() {  this.$watch('searchText', debounce((newSearchText) => {    this.getDatas(newSearchText)  }, 200))}

大功告成!

引用

1. https://stackoverflow.com/questions/29771011/angularjs-watch-with-debounce2. https://www.cnblogs.com/fsjohnhuang/p/4147810.html
你可能感兴趣的文章
HUT-XXXX The window of the dazzling 模拟
查看>>
Linux性能测试 netstat命令
查看>>
参加SAP之所想
查看>>
Objective-C征途:BOOL Party
查看>>
ICA algorithm
查看>>
CSS 浮动
查看>>
JS —时间类
查看>>
pgpool-II的conn_info 指针的结构
查看>>
JAVA的CALLBACK
查看>>
转:Tomcat 启动报错The APR based Apache Tomcat Native l...
查看>>
MyFirefox v2.6.2 - 打造自己的 Firefox 便携版
查看>>
各大类库的类工厂
查看>>
asp.net关于上传文件修改文件名的方法
查看>>
敏捷结果30天之第九天:使用必须、应该、可以来确定每天事情的优先级
查看>>
NFS在redhat中的一些简易应用
查看>>
mysqlbinlog查看编码问题
查看>>
进程通信(VC_Win32)
查看>>
MVP福利--利用Azure虚拟机玩Windows Server 2012
查看>>
Mac中将delete键定义为删除键
查看>>
python 函数关键参数
查看>>