当前位置: 首页 > article >正文

Element-ui Select选择器自定义搜索方法

效果图

在这里插入图片描述

具体实现

<template>
  <div class="home">
    <el-select
      ref="currencySelect"
      v-model="currency"
      filterable
      :spellcheck="false"
      placeholder="请选择"
      :filter-method="handleCurrencyFilter"
      @change="handleCurrencyChange"
      @visible-change="handleCurrencyVisible"
      style="width: 240px;"
    >
      <el-option
        v-for="(item, index) in currencyOptions"
        :key="index"
        :label="item.label"
        :value="item.label"
      >
        <span style="float: left">{{ item.label }}</span>
        <span
          v-if="item.value !== ''"
          style="float: right; color: #8492a6; font-size: 13px;margin-left: 15px;">
          {{ item.nation }}
        </span>
      </el-option>
    </el-select>
  </div>
</template>

<script setup>
import { ref, reactive, computed, onMounted } from "vue"
let currency = ref('')
let currencyOld = ref('')
let flag = ref(false)
const currencySelect = ref(null)
let dataList = reactive([
  { label: 'CNY', value: 'CNY', nation: '中国'},
  { label: 'USD', value: 'USD', nation: '美国'},
  { label: 'EUR', value: 'EUR', nation: '欧盟'},
  { label: 'JPY', value: 'JPY', nation: '日本'},
  { label: 'GBP', value: 'GBP', nation: '英国'},
  { label: 'AUD', value: 'AUD', nation: '澳大利亚'},
  { label: 'CHF', value: 'CHF', nation: '瑞士'},
  { label: 'CAD', value: 'CAD', nation: '加拿大'},
  { label: 'NZD', value: 'NZD', nation: '新西兰'},
  { label: 'SGD', value: 'SGD', nation: '新加坡'},
  { label: 'HKD', value: 'HKD', nation: '香港'},
  { label: 'TWD', value: 'TWD', nation: '台湾'},
  { label: 'SEK', value: 'SEK', nation: '瑞典'},
  { label: 'DKK', value: 'DKK', nation: '丹麦'},
  { label: 'NOK', value: 'NOK', nation: '挪威'},
  { label: 'HUF', value: 'H}UF', nation: '匈牙利'},
  { label: 'PLN', value: 'PLN', nation: '波兰'},
  { label: 'RUB', value: 'RUB', nation: '俄罗斯'},
  { label: 'BRL', value: 'BRL', nation: '巴西'},
  { label: 'MXN', value: 'MXN', nation: '墨西哥'},
  { label: 'ZAR', value: 'ZAR', nation: '南非'},
  { label: 'TRY', value: 'TRY', nation: '土耳其'},
  { label: 'INR', value: 'INR', nation: '印度'},
  { label: 'IDR', value: 'IDR', nation: '印度尼西亚'},
  { label: 'MYR', value: 'MYR', nation: '马来西亚'},
  { label: 'PHP', value: 'PHP', nation: '菲律宾'},
  { label:'THB', value: 'THB', nation: '泰国'},
  { label: 'KRW', value: 'KRW', nation: '韩国'},
  { label: 'VND', value: 'VND', nation: '越南'},
  { label: 'HKD', value: 'HKD', nation: '香港'},
  { label: 'KPW', value: 'KPW', nation: '朝鲜'}
])
let currencyOptions = ref([])

const getData = () => {
  currencyOptions.value = dataList
}
// 自定义搜索方法
const handleCurrencyFilter = (query) => {
  // 如果搜索关键字为空,则恢复搜索前的值
  currency.value = query ? query : currencyOld.value
  currencyOptions.value = dataList.filter(v => {
    return v.label.indexOf(query.toUpperCase()) > -1 || v.nation.indexOf(query) > -1
  })
}
// 选中值发生变化时触发
const handleCurrencyChange = (val) => {
  flag.value = true
  currencyOld.value = val
  currencySelect.value.blur()
  // 延时,避免搜索后下拉列表恢复全量数据时高度闪现
  setTimeout(() => {
    currencyOptions.value = [...dataList]
  }, 150)
}
// 下拉框出现/隐藏时触发
const handleCurrencyVisible = (visible) => {
  if (!visible) {
    // 下拉框隐藏时, 如果没有选择新的值则恢复搜索前的值
    if (!flag.value) currency.value = currencyOld.value
    currencySelect.value.blur()
  } else {
    flag.value = false
  }
}
onMounted(() => {
  getData()
})
</script>
<style scoped lang="less">
.home {
  display: flex;
  justify-content: center;
}
</style>

http://www.kler.cn/a/399363.html

相关文章:

  • 【C语言】科技要闻。
  • 树莓派4B Qt+FFMPEG 多线程录制USB相机mjpeg数据流“h264_omx“硬件编码的MP4文件
  • ONLYOFFICE8.2版本测评,团队协作的办公软件
  • MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并
  • HBuilder(uniapp) 配置android模拟器
  • Hadoop生态圈框架部署(六)- HBase完全分布式部署
  • 游戏如何应对内存修改
  • 优惠券秒杀的背后原理
  • 贪心算法入门(三)
  • outline 分析
  • 深入探讨 .NET Core 3.0 浮点计算差异与解决方案
  • ollama+springboot ai+vue+elementUI整合
  • matlab 读取csv
  • 【C++ 算法进阶】算法提升十六
  • python语言基础-5 进阶语法-5.2 装饰器-5.2.2 简单装饰器
  • 2024年9月青少年软件编程(C语言/C++)等级考试试卷(六级)
  • JavaWeb后端开发知识储备1
  • 【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)
  • 从0开始深度学习(30)——语言模型和数据集
  • Comfy UI Manager 自定义节点管理
  • 基于卷积神经网络的航空发动机剩余寿命预测Matlab实现
  • [每周一更]-(第123期):模拟面试|消息队列面试思路解析
  • STM32 独立看门狗(IWDG)详解
  • PHP 条件语句
  • 无线迷踪:陈欣的网络之旅
  • python之openpyxl快速读取Excel表内容