在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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
JQuery选择器特辑 详细小结
May 14 Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 Javascript
jquery插件制作 手风琴Panel效果实现
Aug 17 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
移动设备web开发首选框架:zeptojs介绍
Jan 29 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
Jun 17 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
详解微信小程序 wx.uploadFile 的编码坑
Jan 23 Javascript
解决vue router组件状态刷新消失的问题
Aug 01 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
PHP加密解密函数详解
2015/10/28 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
使用Apache的rewrite
2021/03/09 Servers
基于jQuery的自动完成插件
2011/02/03 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
JS异步处理的进化史深入讲解
2019/08/25 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python中的is和id用法分析
2015/01/26 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
python isinstance函数用法详解
2020/02/13 Python
python3 实现口罩抽签的功能
2020/03/11 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
教师节商场活动方案
2014/02/13 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
实训报告范文大全
2014/11/04 职场文书
滴水洞导游词
2015/02/10 职场文书
告知书格式
2015/07/01 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
vue 自定义组件添加原生事件
2022/04/21 Vue.js