vue+Element-ui input 远程搜索+模糊查询的实现(el-autocomplete)


前言

在本次项目中,需要完成根据用户输入学院的名称进行远程搜索的需求,刚开始使用的是官网上的形式,聚焦时拿到全部数据放到数组,然后当用户输入文字时循环该数组,将匹配的筛选出来,但是有些数据量太大了,几万条,考虑到性能问题,就由后台做模糊搜索,前端只需请求接口即可,后台返回匹配的数据.


template中的内容

<el-form-item label="学院" prop="academyId" >
          <div>
            <el-autocomplete
                v-model="academyName"
                :fetch-suggestions="academySearchAsync"
                placeholder="请输入学院名称"
                :trigger-on-focus="false"
                @select="handleAcademySelect"
            ></el-autocomplete>
          </div>
</el-form-item>

data部分

academyName:"",
timeout:null,
academyData:[],
searchForm:{
 		academyId:"",
      },

method部分

academySearchAsync(queryString, cb) {
      if(queryString!='') {//输入框中有值
        this.loadAacdemy(queryString, (data) => {
          console.log(data);
          var results = queryString ? data.filter(this.createStateFilter(queryString)) : data;
          clearTimeout(this.timeout);
          this.timeout = setTimeout(() => {
            cb(results);
          }, 5000*Math.random());
        })
      }
    },
    createStateFilter(queryString) {
      return (state) => {
        return (state.value.toLowerCase().indexOf(queryString.toLowerCase())>-1);
      };
    },
    handleAcademySelect(item) {
      this.searchForm.academyId=item.name;
    },
    loadAacdemy(query,fun) {//后台根据用户输入的内容进行模糊查询
      let url=this.urls.academyByLike
      let academies=[];
      this.axios({
        url:url,
        method:"POST",
        data:query
      }).then((res)=>{
        let code=res.data.code;
        if(code===200){
          this.academyData=res.data.data
          console.log(this.academyData)
          if(this.academyData.length>0){
            this.academyData.forEach((item)=>{
              academies.push({
                value:item.name,
                name:item.id
              })
            })
          }else{
            academies.push({
              value:"未找到相关结果",
              name:"未找到相关结果",
            })
          }
          fun(academies);
        }
      }).catch((error) => {
        console.log(error)
      })
    },

mybatis

对于要传参数的sql,因为#{…}解析成sql语句时候,会在变量外侧自动加单引号’ ‘,直接加%会报错
使用concat来拼接参数和%来模糊查询

<select id="getAcademyByLike" resultType="tech.niua.admin.yaoxue.domain.Academy">
        select id,name from dic_academy where name like CONCAT('%',#{param},'%')
</select>
@Override
    public List<Department> getAcademyByLike(String name) {
        return this.baseMapper.getAcademyByLike(newName);
    }
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中使用element-uiInput组件实现模糊查询,你可以通过v-model绑定输入框的值,并监听输入框的change事件,在事件处理函数中调用接口进行查询操作。另外,你可以使用element-uiAutocomplete组件来实现带有下拉提示的模糊查询效果。 示例代码如下: ```html <template> <div> <el-input v-model="keyword" @change="handleSearch" placeholder="请输入关键字"></el-input> <el-autocomplete v-model="selectedValue" :fetch-suggestions="querySearch" placeholder="请输入关键字" @select="handleSelect"> <template slot-scope="{ item }">{{ item }}</template> </el-autocomplete> </div> </template> <script> export default { data() { return { keyword: '', selectedValue: '', suggestions: [] }; }, methods: { handleSearch() { // 调用接口进行查询操作,将查询结果更新到suggestions数组中 // 示例代码中直接使用了一个固定的suggestions数组作为演示,请根据实际需求进行修改 this.suggestions = ['结果1', '结果2', '结果3']; }, querySearch(queryString, cb) { // 在这里可以根据输入的queryString调用接口获取匹配的结果,并通过cb回调函数返回给Autocomplete组件 // 示例代码中直接使用了一个固定的suggestions数组作为演示,请根据实际需求进行修改 const results = queryString ? this.suggestions.filter(item => item.includes(queryString)) : this.suggestions; cb(results); }, handleSelect(item) { // 处理选中某个下拉项的逻辑 console.log('选中的项:', item); } } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值