element-ui输入框下拉远程搜索

实现效果:

可以在你输入的时候出现一个下拉,将你输入的东西与下拉框的内容进行匹配,然后下拉框会显示匹配的内容

 相关代码:

:fetch-suggestions="querySearchAsync"是定义下拉内容的函数方法,restaurants是下拉框的内容,timeout这个定时器使用来决定多少秒后显示筛选后的内容

<el-autocomplete
   style="width: 100%"
   v-model="form.contacts"
   :fetch-suggestions="querySearchAsync"
   placeholder="请输入联系人"
   @select="handleSelect"
   value-key="contacts"
   >
</el-autocomplete>

  export default {
    data() {
      return {
        restaurants: [],
        timeout:  null
      };
    }
}

queryString是输入的内容,cb是显示下拉的回调,需要记住几点
1.在querySearchAsync中queryString和cb这样的形参最好不要去动,防止参数错误
2.在querySearchAsync中使用 cb(results);,可以将results中的数据进行显示在下拉框中
3.createStateFilter函数是用来匹配下拉与输入内容

  querySearchAsync(queryString, cb) {
        var restaurants = this.restaurants;
        var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;

        clearTimeout(this.timeout);
        this.timeout = setTimeout(() => {
          cb(results);
        }, 3000 * Math.random());
      },
      createStateFilter(queryString) {
        return (state) => {
          return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
        };
      },
      handleSelect(item) {
        console.log(item);
      }
    },
    mounted() {
      this.restaurants = this.loadAll();
    }
  };

后端已经有模糊匹配的时候就不用createStateFilter()来进行判断筛选

直接在querySearchAsync()中调用接口,拿返回值就行

    // 联系人搜索建议
    async querySearchAsync(queryString, cb) {
      const data = {
        contacts: queryString,
      };
      // 触发接口把数据给restaurants
      const { rows } = await DynamicPoint(data);
      this.restaurants = rows;
      let restaurants = this.restaurants;
      let results = restaurants;
      clearTimeout(this.timeout);
      this.timeout = setTimeout(() => {
        cb(results);
      }, 300);
    },
    // 点击选中建议项时触发
    handleSelect(item) {
      this.$set(this.form, "contacts", item.contacts);
    },

使用过程中遇到的问题:

1. 如果使用value之外的键名来作为显示的内容,筛选功能就无法实现

2.result中的内容即下拉框的内容中value的值是显示的内容,如果不想使用value的值作为显示的内容,可以在标签中指定value-key来指定在result数组中的键名来进行显示。

 遇到更新....

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值