JiuyeXD's Blog
九叶
九叶博主

越努力 越幸运

登录
夜间

Vue ElementUI中使用<el-autocomplete>标签实现远程搜索下拉框并实现自动填充功能

在elementui Input输入框中可以找到远程搜索组件 获取服务端的数据

在template中添加el-autocomplete

        <el-autocomplete
          class="inline-input"
          v-model="queryParams.unloadingPointName"
          clearable
          :fetch-suggestions="querySearchAsync"
          size="small"
          placeholder="请输入内容"
          :trigger-on-focus="false"
          @select="handleQuery"
        ></el-autocomplete>

在script methods中添加以下函数

    //queryString 为在框中输入的值
    //cb 回调函数,将处理好的数据推回
    querySearchAsync(queryString, cb) {
      let unloadPointList = this.unloadPointListAll;
      unloadPointList = JSON.parse(JSON.stringify(this.unloadPointListAll).replace(/unloadingPointName/g,"value"));
      console.log(unloadPointList)
      let results = queryString ? unloadPointList.filter(this.createStateFilter(queryString)) : unloadPointList;
      console.log('results')
      console.log(queryString)
      console.log(results)
      clearTimeout(this.timeout);
      this.timeout = setTimeout(() => {
        cb(results);
      }, 0.5*1000);
    },
    //根据输入的字段进行筛选
    createStateFilter(queryString) {
      return (state) => {
        console.log(state)
        return (state.value.toString().toLowerCase().indexOf(queryString.toLowerCase()) !== -1);
      };
    },

image.png

选中即可补全

后台获取的数据对象必须有value关键字,因为autocomplete只识别value字段,这里有一个实现的小方法

unloadPointList = JSON.parse(JSON.stringify(this.unloadPointListAll).replace(/unloadingPointName/g,"value"));

JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个数组,可选的仅包括指定的属性。这样我们就可以把自己的属性都替换成value字段啦

THE END