事情起因在:我使用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防抖就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。