vue element-ui select 下拉卡顿问题解决方案

52 篇文章 1 订阅
35 篇文章 0 订阅

<template>
  <el-select
    ref="selectDom"
    v-model="ids"
    multiple
    filterable
    placeholder="请输入关键词"
    remote
    :remote-method="remoteMethod"
    @visible-change="visibleChange"
  >
    <el-option
      v-for="item in options"
      :key="item.id"
      :label="item.name"
      :value="item.id"
    >
    </el-option>
  </el-select>
</template>

<script>
export default {
  data() {
    return {
      ids: [1, 15],
      options: [],
      list: [],
    };
  },
  mounted() {
    this.init();
  },
  methods: {
    init() {
      // 数据源
      this.list = [
        { name: "Alabama", id: 1 },
        { name: "Alaska", id: 2 },
        { name: "Pennsylvania", id: 3 },
        { name: "Rhode Island", id: 4 },
        { name: "South Carolina", id: 5 },
        { name: "South Dakota", id: 6 },
        { name: "Tennessee", id: 7 },
        { name: "Texas", id: 8 },
        { name: "Utah", id: 9 },
        { name: "Vermont", id: 10 },
        { name: "Virginia", id: 11 },
        { name: "Washington", id: 12 },
        { name: "West Virginia", id: 13 },
        { name: "Wisconsin", id: 14 },
        { name: "Wyoming", id: 15 },
      ];
      // 默认展示10条
      this.options = this.list.slice(0, 10);
      // 解决回显时显示为id的问题
      this.list.forEach((item) => {
        this.$refs["selectDom"].cachedOptions.push({
          currentLabel: item.name,
          currentValue: item.id,
          label: item.name,
          value: item.id,
        });
      });
    },
    remoteMethod(query) {
      if (query !== "") {
        // 展示匹配的前10条
        this.options = this.list
          .filter((item) => {
            return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1;
          })
          .slice(0, 10);
      } else {
        // 展示10条
        this.options = this.list.slice(0, 10);
      }
    },
    visibleChange(value) {
      if (!value) {
        // 展示10条
        this.options = this.list.slice(0, 10);
      }
    },
  },
};
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值