vxe-list vue 如何实现下拉框的虚拟列表

实现下拉框的虚拟列表可以优化大数据量情况下的性能,提升用户体验。本文将介绍如何在vxe-list组件中实现虚拟列表。

一、vxe-list组件

vxe-list 是一款Vue的表格和代码编辑器。它可以以树状或断面等形式,支持树状数据结构的渲染和可编辑性,还可以更改代码高亮。下面是官方github链接:https://github.com/xuliangzhan/vxe-table/blob/master/packages/list/README.md

其中,vxe-list提供了virtual-scroll参数,该参数可以开启虚拟滚动,解决大数据量渲染的卡顿问题。

二、实现过程

将vxe-list组件配置中的height和virtual-scroll参数设置为一个数值,如下所示:

<vxe-list
 :height="300"
 :virtual-scroll="{size: 20}"
>
...
</vxe-list>

其中,height参数代表组件的高度,当数据量较小时,可以不使用虚拟滚动,而直接显示所有项。virtual-scroll中的size参数代表组件每次渲染的行数,渲染的行数越少,性能表现越好。

下面,我们来看两个示例:

示例一:省市区三级联动选择器

我们在列表中显示省市区三级联动选择器时,由于区域数据量较大,渲染时可能会造成页面卡顿。使用vxe-list的虚拟滚动可以改善这个问题。

首先,在template的vxe-list标签上添加height和virtual-scroll参数:

<template>
  <vxe-list
    :height="300"
    :virtual-scroll="{size: 20}"
    ref="list"
    :data="data">
    静态列 
    <template v-slot="{ $row }">
      <vxe-cell>
        <vxe-form-item :prop="'province'+$row.rowid" :rules="rules" :class="{'item-error': errors['province'+$row.rowid]}">
          <vxe-select :span="24" v-model="data[$row.rowid].province"  placeholder="请选择省份" clearable :options="provinces" @change="changeProvince($event.target.value, $row.rowid)"></vxe-select>
        </vxe-form-item>
        <vxe-form-item :prop="'city'+$row.rowid" :rules="rules" :class="{'item-error': errors['city'+$row.rowid]}">
          <vxe-select :span="24" v-model="data[$row.rowid].city" placeholder="请选择城市" clearable :options="getCities($row.rowid)" @change="changeCity($event.target.value, $row.rowid)"></vxe-select>
        </vxe-form-item>
        <vxe-form-item :prop="'district'+$row.rowid" :rules="rules" :class="{'item-error': errors['district'+$row.rowid]}">
          <vxe-select :span="24" v-model="data[$row.rowid].district" placeholder="请选择区域" clearable :options="getDistricts($row.rowid)"></vxe-select>
        </vxe-form-item>
      </vxe-cell>
    </template>
  </vxe-list>
</template>

在data中,我们需要给每个省市区添加唯一的标识ID,而且这个ID必须连续,如下所示:

data: [
  { rowid: 0, province: '', city: '', district: '' },
  { rowid: 1, province: '', city: '', district: '' },
  { rowid: 2, province: '', city: '', district: '' },
  ...
]

接下来,我们需要为每个省份、城市和区域获取选项,在methods中添加如下方法:

methods: {
  // 计算各省份的城市选项
  getCities (index) {
    let item = this.data[index]
    let province = item.province
    return province ? highData[province] : []
  },
  // 计算各城市的区域选项
  getDistricts (index) {
    let item = this.data[index]
    let province = item.province
    let city = item.city
    return city ? middleData[province][city] : []
  }
}

此时,我们已经实现了虚拟列表选择器的三级联动,用户在选择省份时,系统会计算出省份下的城市选项列表,同时渲染到当前显示项前后的列表中。

示例二:通过接口获取大数据量列表

我们需要调用接口获取一个包含大量数据的列表,如数万行数据。为了避免性能问题,我们可以使用vxe-list的虚拟滚动来实现。

在data中,我们需要添加一个空数组,用于接收获取到的数据:

data: []

接下来,在mounted钩子中,我们可以通过$http.get()方法从后端接口获取数据并保存在data中,并设置height和virtual-scroll参数:

mounted () {
  this.getList()
},
methods: {
  async getList () {
    try {
      let { data } = await this.$http.get('/api/list')   // 获取数据
      this.data = data                                    // 将数据存到data中
      this.$nextTick(() => {
        // 定义每次加载多少条数据
        this.$refs.list.virtualScroll(parseInt(this.$refs.list.$el.clientHeight / this.$refs.list.calcRowHeight()))
      })
    } catch (e) {
      console.error(e)
    }
  }
}

注意,此处需要在this.$nextTick()回调函数中给vxe-list组件加载滚动事件。另外,calcRowHeight()也是需要的,它可以计算每行的高度并进行优化。

三、总结

本文介绍了如何使用vxe-list组件实现虚拟列表,提升大数据量时的性能表现,用户体验。我们通过两个示例,分别展示了省市区三级联动列表和从接口中加载大数据量列表。

在高负重的数据应用项目中,对列表组件的渲染性能常常是一个需要优化的问题。通过使用vxe-list组件和虚拟滚动,我们可以避免对用户的糟糕体验,同时保证加载和渲染大量数据的效率和速度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vxe-list vue 如何实现下拉框的虚拟列表 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 如何让DIV可编辑、可拖动示例代码

    当我们需要在网页中实现某些交互操作时,可以通过让div元素可编辑、可拖动来实现更灵活的操作。下面是如何让div元素可编辑、可拖动的完整攻略: 让DIV可编辑 一般来说,我们可以使用contenteditable属性将div元素设置为可编辑的状态,具体如下: <div contenteditable="true"> 这里是可编辑…

    css 2023年6月10日
    00
  • jQuery过滤选择器经典应用

    接下来我将详细讲解“jQuery过滤选择器经典应用”的完整攻略。 一、什么是jQuery过滤选择器 jQuery过滤选择器是指根据一定的条件对HTML元素进行过滤筛选,最终获得需要的元素。过滤选择器一般用于从匹配元素集合中筛选出符合特定条件的元素,可以帮助我们更快地定位需要的元素,提高代码效率。 常用的jQuery过滤选择器有以下几种: 过滤选择器 说明 :…

    css 2023年6月10日
    00
  • 利用CSS3的定位页面元素

    利用 CSS3 定位页面元素基本包含以下几个主题,我逐一讲解并提供两个示例。 1. 了解 CSS3 定位的基本概念 CSS3 定位是指利用 CSS3 的技术,对页面元素进行定位,让它们呈现出预期的位置、大小和形态。CSS3 定位技术主要有以下几种: 相对定位:元素相对于其本身的位置进行定位。 绝对定位:元素相对于其最近的非静态定位祖先元素进行定位。 固定定位…

    css 2023年6月9日
    00
  • Vue3之列表动画和状态动画示例详解

    Vue3之列表动画和状态动画示例详解 在这个攻略中,我们将会学习如何使用Vue3来实现列表动画和状态动画。 列表动画 列表动画的实现可以分为两步: 定义 transition 组件 在具体列表项中使用该 transition 组件来实现动画效果 定义 transition 组件 在 Vue3 中,我们可以通过定义 Transition 组件来实现列表动画: …

    css 2023年6月10日
    00
  • IE6,IE7和firefox对DIV的支持区别

    DIV是HTML标签中的容器元素,主要用于分割网页的各个区域。IE6、IE7和Firefox是网页浏览器,对DIV的支持有些差异,下面我将为大家详细讲解IE6,IE7和Firefox对DIV的支持区别。 支持CSS样式的差异 在IE6和IE7中,CSS样式的支持存在一定的缺陷。例如,对于一些CSS样式的渲染,IE6和IE7往往需要通过hack、特定的styl…

    css 2023年6月10日
    00
  • jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】

    以下是实现点击图片放大缩小预览功能的完整攻略: 步骤一:下载jQuery库文件 首先需要在网站上引入jQuery库文件,可以在官网(https://jquery.com/)进行下载。将下载好的jQuery文件放在项目的js目录下。 步骤二:编写HTML页面 紧接着,可以在HTML页面中编写图片预览模块的HTML代码。以下是一个简单的示例: <div c…

    css 2023年6月10日
    00
  • 浅析与CSS3的loading动画加载相关的transition优化

    下面是关于“浅析与CSS3的loading动画加载相关的transition优化”的完整攻略。 什么是CSS3的loading动画加载? CSS3的loading动画加载,顾名思义,是指使用CSS3来实现的页面加载动画。通过对一系列元素的设计,从而达到页面加载时显示动画的效果。这种动画效果可以提高用户等待加载的体验感,从而增加用户对网站的好感度。 trans…

    css 2023年6月10日
    00
  • CSS实现Sticky Footer的示例代码

    当网页内容不足以占满整个页面时,如果页面的底部有一行始终停留在页面的底部,这种效果称为”Sticky Footer”(粘性页脚)。 以下是实现Sticky Footer的代码: <!DOCTYPE html> <html> <head> <title>Sticky Footer Example</titl…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部