问题:使用 el-select做下拉选择,只设置filterable,下拉数据量少没有问题,但如果下拉的数据量很大,会导致卡顿甚至卡死。

解决方法:使用remote解决
el-select属性里增加如下代码

remote
remote-show-suffix
:remote-method="filterFn"

js 中增加

const filterFn = (query) => {
  if (query !== '') {
    options.value = list.filter(item => item.label.toLowerCase().includes(query.toLowerCase()))
  } else {
    options.value = list
  }
}

完整代码如下

<template>
    <el-select
        v-model="value"
        filterable
        remote
        remote-show-suffix
        :remote-method="filterFn"
      >
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        />
      </el-select>
</template>

<script setup>
import { ref } from 'vue'

const list = [] // 这里存放所有的数据
const options = ref([]) // 这里存放过滤后的数据

const filterFn = (query) => {
  if (query !== '') {
    options.value = list.filter(item => item.label.toLowerCase().includes(query.toLowerCase()))
  } else {
    options.value = list
  }
}
</script>
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐