在vue+element ui框架里实现lodash的debounce防抖


Posted in Javascript onNovember 13, 2019

事情起因在:我使用element ui框架里的远程搜索框,在单选时,组件内部已经做了防抖,query是在一段时间内的字符串。但是在多选时,并没有做防抖,而是每输入一个字符都要向后台发一次请求,所以必须防抖,官方推荐使用lodash的debounce

在解决这个问题时,我遇到的坎儿主要有以下:

我首先在项目里用npm安装lodash,先全局安装,然后安装到项目

npm install -g lodash
npm install --save lodash

安装后,我就在我要用防抖的组件里,引入lodash

var lodash = require('lodash');

以下就开始了走弯路

我百度后,查询到debounce总和keyup一起使用,所以我就在我的搜索框里绑定了keyup事件,但是绑定的事件并没有生效,通过查询得知,在element ui封装了input,所以要在后面加上.native才可以覆盖原来的事件

<el-select
  v-model="AddCandidateFrom.follow_hr"
  filterable
  multiple
  placeholder="请选择跟进HR"
  @keyup.native="getRemoteFollow"
  :loading="followLoading"
  class="select-item">
  <el-option
    v-for="item in followOption"
    :key="item.value"
    :label="item.label"
    :value="item.value">
  </el-option>
</el-select>

keyup成功绑定事件后,我发现得到的结果并不是我想要的,因为keyup绑定事件里得到的参数是我在键盘里输入的一个字符,但我想要得到的是输入后的整个字符串。所以我就又开始使用watch监听this.AddCandidateFrom.follow_hr

监听this.AddCandidateFrom.follow_hr后,我发现并没有用,因为它代表的是多选框中已经选中了的字符串,正在输入的字符串不会记录进去,所以我又回退到使用远程搜索本身的方法,绑定remote-methods

<el-select
  v-model="AddCandidateFrom.follow_hr"
  filterable
  multiple
  remote
  placeholder="请选择跟进HR"
  :remote-method="getRemoteFollow"
  :loading="followLoading"
  class="select-item">
  <el-option
    v-for="item in followOption"
    :key="item.value"
    :label="item.label"
    :value="item.value">
  </el-option>
</el-select>

绑定了remote-method方法后,我就使用传统的方法定义绑定的方法(),没有使用es6简写的方法,这是因为,使用lodash.debounce返回的是一个函数。如果有参数,则在function空的形参列表里加入

getRemoteFollow: lodash.debounce(function () {
  console.log('111');
}, 300),

以上这篇在vue+element ui框架里实现lodash的debounce防抖就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
bootstrap 通过加减按钮实现输入框组功能
Nov 15 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
JavaScript中toLocaleString()和toString()的区别实例分析
Aug 14 Javascript
JS+DIV实现拖动效果
Feb 11 Javascript
vue+animation实现翻页动画
Jun 29 Javascript
element实现合并单元格通用方法
Nov 13 #Javascript
vue之debounce属性被移除及处理详解
Nov 13 #Javascript
Vue的click事件防抖和节流处理详解
Nov 13 #Javascript
vue表单数据交互提交演示教程
Nov 13 #Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 #Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
Nov 13 #Javascript
基于vue-cli3和element实现登陆页面
Nov 13 #Javascript
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
python操作 hbase 数据的方法
2016/12/18 Python
对pandas中Series的map函数详解
2018/07/25 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
python numpy中cumsum的用法详解
2019/10/17 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Python与C/C++的相互调用案例
2021/03/04 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
党员自我批评与反省材料
2014/02/10 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
清明节演讲稿
2014/05/27 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
法学专业求职信
2014/07/15 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
2015年招聘工作总结
2014/12/12 职场文书
幼儿教师个人总结
2015/02/05 职场文书
办公室禁烟通知
2015/04/23 职场文书
在校证明模板
2015/06/17 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL