angular.js和vue.js中实现函数去抖示例(debounce)


Posted in Javascript onJanuary 18, 2018

问题描述

搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起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))
}

大功告成!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
jquery实现保存已选用户
Jul 21 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
深入分析Cookie的安全性问题
Mar 01 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
Dec 21 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
JS中超越现实的匿名函数用法实例分析
Jun 21 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
May 29 Javascript
three.js显示中文字体与tween应用详析
Jan 04 Javascript
vue-scroller记录滚动位置的示例代码
Jan 17 #Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
Jan 17 #Javascript
详解微信小程序审核不通过的解决方法
Jan 17 #Javascript
swiper动态改变滑动内容的实现方法
Jan 17 #Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 #Javascript
使用Vue开发一个实时性时间转换指令
Jan 17 #Javascript
angularjs 页面自适应高度的方法
Jan 17 #Javascript
You might like
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
JS中去掉array中重复元素的方法
2017/05/26 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
Python的词法分析与语法分析
2013/05/18 Python
Python装饰器用法实例总结
2018/02/07 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
python实现双色球随机选号
2020/01/01 Python
python入门教程之基本算术运算符
2020/11/13 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
残疾人创业典型事迹
2014/02/01 职场文书
喝酒检查书范文
2014/02/23 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书