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日

相关文章

  • CSS3五个技巧给你的网站带来出色的效果

    CSS3五个技巧给你的网站带来出色的效果 1. 渐变(Gradient) 渐变是一种非常流行的Web设计元素,可以为网站添加出色的色彩效果。CSS3中的Gradient功能可以让我们很容易地实现渐变。 实现一个横向渐变背景色的例子: background: linear-gradient(to right, #3366cc 0%, #666666 100%)…

    css 2023年6月10日
    00
  • CSS学习之CSS网页制作的10个技巧

    CSS学习之CSS网页制作的10个技巧 CSS(Cascading Style Sheets,层叠样式表)是一种用来展示HTML(Hypertext Markup Language,超文本标记语言)或XML(Extensible Markup Language,可扩展标记语言)等文档样式的语言。在网页设计中,CSS起到控制网页整体外观与样式的作用,为美化、调…

    css 2023年6月9日
    00
  • CSS隐藏页面元素的5种方法

    关于“CSS 隐藏页面元素的5种方法”的完整攻略,我将从以下几个方面进行介绍: 隐藏元素的背景色和边框颜色,将元素设置为透明; 将元素的宽和高设为0; 使用“display:none”隐藏元素; 利用“visibility:hidden”来隐藏元素; 设置元素的“opacity:0”属性来隐藏元素。 下面,我们将一一介绍这五种方法。 1. 隐藏元素的背景色和…

    css 2023年6月10日
    00
  • 深入理解CSS overflow:hidden——溢出,坍塌,清除浮动

    深入理解CSS overflow:hidden——溢出,坍塌,清除浮动 溢出(Overflow) 当元素的内容超出了容器的范围时,我们需要处理这种溢出现象。此时,我们可以使用CSS属性overflow来控制其内容的显示方式。 overflow:hidden 使用overflow:hidden可以隐藏元素的溢出内容,这通常用于父元素中有绝对定位子元素时的处理。…

    css 2023年6月10日
    00
  • HTML5+CSS3应用详解

    HTML5+CSS3应用详解攻略 HTML5和CSS3是前端技术中重要的两个组成部分,对于网站的设计和开发具有至关重要的作用。本文将介绍HTML5+CSS3应用的完整攻略,希望能帮助前端开发者更好地掌握这两项技术,从而设计和开发出更精美、流畅的网站。 1. HTML5的应用 1.1. HTML5的基本结构 HTML5语言的基本结构是由html、head、bo…

    css 2023年6月9日
    00
  • DIV设置float后父容器无法定位高度的问题解决方法

    当子元素设置了float属性之后,父元素就会无法自适应子元素高度,导致页面布局错误。针对这个问题,一般有以下几种解决方法: 1. 使用CSS的clear属性 当子元素设置float属性时,可以在父元素中添加一个空的块元素,然后给这个块元素添加CSS的clear属性,属性值设置为both,就可以清除子元素的浮动影响,让父容器自适应高度。 示例代码: <d…

    css 2023年6月10日
    00
  • Ueditor和CKeditor 两款编辑器的使用与配置方法

    Ueditor和CKeditor 两款编辑器的使用与配置方法 一、Ueditor编辑器的使用和配置方法 1.1下载Ueditor源码 在Ueditor官网(http://ueditor.baidu.com/website/)下载Ueditor源码,解压后将ueditor文件夹拷贝到网站根目录 1.2引入UEDitor 在HTML文件里引入UEditor的相关…

    css 2023年6月9日
    00
  • HTML5中 rem适配方案与 viewport 适配问题详解

    HTML5中rem适配方案与viewport适配问题详解 什么是rem? rem是CSS3新增的一个相对单位,相对于根元素html的字体大小来计算。 rem适配方案是什么? rem适配方案是指通过JavaScript获取当前屏幕宽度,并动态设置html的font-size值,然后使用rem作为单位设置元素的大小,实现自适应的布局。 如何实现rem适配方案? …

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