el-select 支持拼音搜索(含插件 pinyin-match 的使用)

简介: el-select 支持拼音搜索(含插件 pinyin-match 的使用)

效果预览

安装插件 pinyin-match

cnpm i pinyin-match --save

导入插件 pinyin-match

import PinYinMatch from "pinyin-match";

在过滤方法中使用

    matchFruit(searchContent) {
      if (searchContent) {
        let result = [];
        this.list_org.forEach((item) => {
          // matchResult 的值为 true/false
          let matchResult = PinYinMatch.match(item.label, searchContent);
          if (matchResult) {
            result.push(item);
          }
        });
        this.list_filtered = result;
      } else {
        this.list_filtered = this.list_org;
      }
    },

完整范例

<template>
  <div class="container">
    <el-select
      v-model="fruit"
      placeholder="请选择水果"
      filterable
      :filter-method="matchFruit"
      clearable
      @clear="clearFruit"
    >
      <el-option
        v-for="item in list_filtered"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      >
      </el-option>
    </el-select>
  </div>
</template>
<script>
import PinYinMatch from "pinyin-match";
export default {
  data() {
    return {
      fruit: "",
      list_org: [
        {
          value: 1,
          label: "苹果",
        },
        {
          value: 2,
          label: "香蕉",
        },
        {
          value: 3,
          label: "梨子",
        },
      ],
      list_filtered: [],
    };
  },
  mounted() {
    this.list_filtered = this.list_org;
  },
  methods: {
    matchFruit(searchContent) {
      if (searchContent) {
        let result = [];
        this.list_org.forEach((item) => {
          // matchResult 的值为 true/false
          let matchResult = PinYinMatch.match(item.label, searchContent);
          if (matchResult) {
            result.push(item);
          }
        });
        this.list_filtered = result;
      } else {
        this.list_filtered = this.list_org;
      }
    },
    clearFruit() {
      this.list_filtered = this.list_org;
    },
  },
};
</script>

<style lang="scss" scoped>
.container {
  margin: 30px;
}
</style>

注意事项

  • el-option 的 v-for 循环中的 key 不能用 index, 否则会出现输入拼音不显示的bug,如输入 l 不显示
  • 若 el-select 添加了 clearable,则需如范例添加 @clear=“clearFruit” 以便在清除内容后,将下拉列表恢复为过滤前的列表。
目录
相关文章
|
24天前
|
JavaScript 前端开发
layui下拉框xm-select自定义搜索使用方法
【10月更文挑战第28天】`xm - select` 是基于 Layui 的下拉框增强插件,支持自定义搜索功能。实现步骤包括:1. 引入 Layui 和 xm - select 的核心文件;2. 创建下拉框的基本 HTML 结构;3. 使用 `layui.use` 函数初始化插件并配置搜索功能;4. 可选地进行高级自定义搜索优化,如模糊匹配、多字段搜索和实时更新数据。通过这些步骤,可实现灵活的下拉框搜索功能。
209 1
|
5月前
|
自然语言处理 Java Maven
word分词--实例---用法
word分词--实例---用法
37 2
|
6月前
|
移动开发 前端开发 JavaScript
uVIew Search 搜索
uVIew Search 搜索
68 0
|
Python
Python搜索与匹配绝技:掌握search()和match()从零到高手
Python搜索与匹配绝技:掌握search()和match()从零到高手
114 0
|
JavaScript
jquery模糊查询--搜索demo效果示例(整理)
jquery模糊查询--搜索demo效果示例(整理)
33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
一日一技:在ES中如何使用通配符搜索keyword字段
一日一技:在ES中如何使用通配符搜索keyword字段
293 0
Elasticsearch搜索模板search tempalte
Elasticsearch搜索模板search tempalte
|
算法 定位技术 索引
全文搜索(full-text search)
全文搜索(full-text search)
382 0
|
JSON 自然语言处理 固态存储
大神都这么做,让 Kibana 搜索语法 query string 也能轻松上手
kibana 的搜索框默认选择了 query string 的搜索语法,虽然简洁却不简单,本文来帮大家如何轻松上手;
16481 1
大神都这么做,让 Kibana 搜索语法 query string 也能轻松上手