el-autocomplete输入后匹配建议及解决clearable清除按钮输入建议失效问题

  1. 组件

<el-autocomplete
    v-model="name"
    :fetch-suggestions="querySearch"
    placeholder="请输入内容"
    :trigger-on-focus="false"
    style="width:100%"
   clearable
   @clear="blurForBug()"
  ></el-autocomplete>
  1. 实时查询,输入文字后调用接口

//在data中定义一个定时器
timer:null,


//获取下拉数据
    querySearchAsync(queryString, cb) {
      let param = {
        name: queryString,
      };
      this.$api
        .findWbdLocnByWh(param)
        .then(res => {
          if (res.data.code == "0") {
            let result = res.data.data.map(item => {
              return {
                value: item.name,
                ...item
              };
            });
         //规定在输入完一个字符后,如果300ms内没有继续输入,那么300ms后就发送一次请求;如果在300ms内继续输入了内容,那么就会删除上次定时器,重新开始计时,直到300ms内没有继续输入时再发送请求。这样就减少了一些不必要的请求
            if (this.timer) {
              clearTimeout(this.timer);
            }
            this.timer = setTimeout(() => {
              cb(result)
            }, 300);
          }
        })
        .catch(error => {});
    },
   // 点击clearable清空小图标按钮以后,继续重新在输入框中输入数据,querySearch会触发,但是cb函数不会触发
    // 这样的话就会出现发请求了,也获取数据了,但是input框的输入建议下拉框不呈现在页面上的问题,所以解决方法就是
    blurForBug(){
      document.activeElement.blur()
    },
  1. 不实时调用接口,直接前端过滤

//输入后匹配
     querySearch(queryString, cb) {
       var restaurants = this.restaurants;
        var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
        // 调用 callback 返回建议列表的数据
        cb(results);
      },
      createFilter(queryString) {
        return (restaurant) => {
          return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
        };
      },

//获取数据
 getList(){
     let params = {
      };
      this.$api
        .findWbdLocnByWh(param).then((res) => {
          if (res.data.success) {
            this.restaurants=[]
            res.data.data.forEach(item => {
                this.restaurants.push({
                  value: item.name,
                })
              })

          } else {
           
          }
        })
        .catch((res) => {
        });
    },
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~犇犇~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值