话不多说,直接先上代码

      <el-form-item label="省份" v-show="!isSe" prop="province">
        <el-select v-model="queryParams.province" :filter-method="pinyinMatch" placeholder="请选择省份">
          <el-option
            v-for="item in optionsProvince"
            :key="item"
             @focus="focusFnP"
            :label="item"
            :value="item">
          </el-option>
        </el-select>
      </el-form-item>
   import pinyin from 'pinyin-match'  //  需要引入这个

  data() {
    return {
optionsProvince: [], // 获取省份
 originProvince: [], // 原始省份
    };
  },


 pinyinMatch (val) {
      this.copyDept = this.firstList
      if (val) {
        let result = [] // 声明一个空数组保存搜索内容
        this.copyDept.forEach(e => { // 循环判断内容和拼音首字母是否匹配
          let m = pinyin.match(e, val)
          if (m) {
            result.push(e)
          }
        })
        this.source = result // 返回匹配的数组
      } else {
        this.source = this.copyDept // 未输入返回开始copy的原数组
      }
    },

focusFnP() {
      this.optionsProvince = this.originProvince
    },

这里是在vue中实现的,有需要的可以参考一下

思路:在一个输入框输入一些数据,然后可以在输入框的下面进行过滤,最终通过点击确认。

pinyinMatch方法是拼音搜索的主要功能,会做一次过滤,这个时候其实已经可以了,但是有一个问题,当你再次点击输入框的时候,会出现数据不能返回所有的数据。

因此另一个关键的方法出现了focusFnP方法通过@focus="focusFnP"绑定,当鼠标触发该事件的时候,把输入框下面的数据变成原始数据。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐