ElementUi使用el-autocomplete实现搜索建议(无数据匹配+点击clearable清除,不触发下拉选项)

先上效果图:
首先没输入的情况下是这样
在这里插入图片描述
如果有匹配选项是这样
在这里插入图片描述
匹配不到是这样
在这里插入图片描述
在使用过程中发现,element的el-autocomplete组件是不支持没有数据的时候提示无匹配数据的,如果要设置成可关闭的,发现点击关闭后,如果还是在聚焦状态,再次输入是不触发输入建议的,如下图:
在这里插入图片描述
代码如下:

     <el-form-item label="平台名称">
       <el-autocomplete
         ref="el_auto" // 为了解决关闭后不匹配
         v-model="platformName"
         :fetch-suggestions="querySearch"
         :trigger-on-focus="false"
         :clearable="true"
         :popper-class="noData ? 'platform-auto-complete' : ''"         
         value-key="platformName" // 输入建议对象中用于显示的键名,默认是value
         class="inline-input"
         placeholder="请输入上报平台关键字"
         @select="handleSelect"
         @clear="clearSelect"
       >
       // 解决匹配不到提示无匹配数据
         <template v-if="noData" slot-scope="{ item }">
           <div class="default">{{ item.default }}</div>
         </template>
       </el-autocomplete>
     </el-form-item>
  data(){
    return{
      platformName:'',
      platformList: [], // 平台列表
      noData: false // 是否匹配到数据了
    }
  },
  methods:{
      querySearch(queryString, callback) {
      let matchResults = queryString ? this.platformList.filter(this.createFilter(queryString)) : this.platformList;
      this.noData = false
      if (matchResults.length === 0) {
        matchResults = [{default: '无匹配数据'}]
        this.noData = true
      }
      // 调用 callback 返回建议列表的数据
      callback(matchResults);
    },
    createFilter(queryString) {
      return platform => {
        return (
          platform.value.toLowerCase().indexOf(queryString.toLowerCase()) !== -1
        );
      };
    },
    handleSelect(val) {
      this.searchForm.platformId = val.platformId
    },
    // 看element源码发现,在点击关闭时,发现把activated 置为false了
    clearSelect() {
      this.$refs.el_auto.activated = true
      // 方法二:让输入框失去焦点
      // document.activeElement.blur()     
    }
  }

这里说一下:对于点击关闭后,再次输入触发不了输入建议,是因为elementui源码有bug,图片如下:
在这里插入图片描述

在这里插入图片描述
解决主要有两种思路:第一种是给组件添加一个ref,在执行清除事件的时候,把activated置为true
第二种就是让输入框失去焦点,就是document.activeElement.blur()

activeElement 属性返回文档中当前获得焦点的元素。

另外:还需要给无匹配数据时修改样式,要不然就是可点击的,图片如下:
在这里插入图片描述

<style lang="scss">
.platform-auto-complete {
  .el-autocomplete-suggestion__wrap {
    padding: 5px 0;
    ul li {
      pointer-events:none; // 阻止可点击事件
      .default {
        text-align: center;
        color: #999;
      }
      &:hover{
        background-color: #fff;
      }
    }
  }
}

另外用这个组件还需要注意,如果el-autocomplete接受的数组对象里面没有value属性,就需要用value-key(输入建议对象中用于显示的键名)可以指定对应的key,如果不用value-key,那就需要处理数组,给数组加上一个value的key,要不然输入建议显示不出来,如下图
在这里插入图片描述

  • 15
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
el-autocomplete聚焦时调用接口,可以通过在el-autocomplete的@focus事件中调用接口实现。具体的实现步骤如下: 1. 在el-autocomplete的模板中添加@focus事件,例如: ```html <el-autocomplete ref="autocomplete" class="autocomplete" v-model="form.name" :fetch-suggestions="querySearch" clearable placeholder="请选择客户" @select="choose_memebr" @clear="blur_memebr()" @focus="fetchData"></el-autocomplete> ``` 2. 在Vue实例中定义fetchData方法,该方法用于调用接口获取数据,例如: ```javascript methods: { fetchData() { // 调用接口获取数据的逻辑 // ... } } ``` 3. 在fetchData方法中编写调用接口的逻辑,可以使用axios或其他HTTP库发送请求,例如: ```javascript methods: { fetchData() { axios.get('/api/data') .then(response => { // 处理接口返回的数据 // ... }) .catch(error => { // 处理接口请求失败的情况 // ... }); } } ``` 通过以上步骤,当el-autocomplete聚焦时,会触发@focus事件,从而调用fetchData方法,实现在聚焦时调用接口获取数据的功能。 #### 引用[.reference_title] - *1* *2* [【ElementUIel-autocomplete 远程搜索自动填充](https://blog.csdn.net/wuli_youhouli/article/details/124673271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ElementUi使用el-autocomplete实现搜索建议(无数据匹配+点击clearable清除,不触发下拉选项)](https://blog.csdn.net/weixin_46074961/article/details/127449047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值