element表格分页+数据过滤筛选

news2024/11/20 12:29:24

目录

  • 前言
  • 效果展示
    • 分页效果展示
    • 搜索效果展示
  • 代码分析
    • 分页功能
    • 过滤数据功能
  • 全部代码

前言

在el-element的标签里的tableData数据过多时,会导致表格页面操作卡顿。为解决这一问题,有以下解决方法:

分页加载: 将大量数据进行分页,并且只在用户需要时加载当前页的数据,可以减轻页面的数据负担。可以使用像 Element UI 提供的分页组件来实现分页加载功能。
虚拟滚动: 对于大量数据的列表展示,可以考虑使用虚拟滚动技术,只渲染当前可见区域的数据,而不是直接渲染所有数据。Element UI 的 Table 组件也支持虚拟滚动,可以通过相应的配置开启虚拟滚动功能。可参考虚拟滚动其它博主的文章
数据筛选和搜索: 提供数据筛选和搜索功能,让用户可以根据条件快速定位到需要的数据,减少不必要的数据展示。
服务端优化: 如果数据来源于服务端,可以在服务端对数据进行分页、压缩等处理,以减少前端页面加载的数据量。
组件优化: 检查页面中其他组件的性能表现,确保没有其他组件或代码导致页面性能下降。
前端性能优化: 考虑对前端代码进行性能优化,比如减少不必要的重复渲染、减少对大数据量的循环操作等。

效果展示

分页效果展示

在这里插入图片描述

搜索效果展示

在这里插入图片描述

代码分析

数据结构:

[
  {
    "name1": "名称11",//需要搜索的关键字字段name1
    "name2": "名称21",
    "name3": "名称31",
    "name4": "名称41",
    "ID": 1
  },
  ......
]

data:

tableData: [], // 原始数据
currentPage: 1, // 当前页码
pageSize: 10, // 每页显示的数量
searchText: ‘’, // 搜索的文本
filteredData: [], // 搜索后的数据

分页功能

首先,在computed中,使用displayData计算属性来根据当前页码和每页数量筛选出要显示的数据。在el-table标签中绑定displayData:<el-table :data="displayData"></el-table>

通过computed属性,我们可以定义根据响应式数据计算的属性,并在模板中使用。Vue会自动追踪依赖关系,当依赖的响应式数据发生变化时,computed属性会重新计算其值。

computed: {
    // 根据当前页码和每页数量计算显示的数据
    displayData () {
      const startIndex = (this.currentPage - 1) * this.pageSize;
      const endIndex = startIndex + this.pageSize;
      return this.tableData.slice(startIndex, endIndex);
    },
  },

其次,在methods中,handleSizeChange方法用于处理改变每页显示数量的事件,handleCurrentChange方法用于处理改变当前页码的事件。

// 改变每页显示的数量时触发
handleSizeChange(newSize) {
      this.pageSize = newSize;
      this.currentPage = 1; // 重置当前页码为第一页
},
// 改变当前页码时触发
handleCurrentChange(newPage) {
      this.currentPage = newPage;
},

最后,在mounted中,我们假设通过某种方式获取了原始数据,并将其赋值给tableData数组,若是调用接口,则在调用接口将获取的数据赋值给tableData数组即可。这里示例是用的json数据。

data () {
    return {
      tableData: jsondata,//方法一:使用示例数据进行演示,将json数据赋值给tableData数组
    };
},
mounted() {
    // 方法二:实际情况下可以通过接口请求或其他方式获取数据
    // 假设tableData是从后端获取的原始数据
    this.searchFun();
},
methods: {
	searchFun(){
		//......调用接口
		.then((res) => {this.tableData = res.obj;//将数据赋值给tableData})
		.catch((err) => {console.log("err",err);})
	},
}

这样,当用户改变每页显示数量或当前页码时,表格会自动根据新的参数重新渲染显示数据,同时Element UI的分页组件也会更新页码和显示的数据数量

过滤数据功能

1、在data中,添加了filteredData用于存储搜索后的数据,searchText用于保存搜索的文本。

searchText: '', // 搜索的文本
filteredData: [], // 搜索后的数据

2、在computed中,修改了displayData计算属性,使用filteredData进行分页显示。

computed: {
    displayData () {
      // 根据当前页码和每页数量计算显示的数据
      const startIndex = (this.currentPage - 1) * this.pageSize;
      const endIndex = startIndex + this.pageSize;
      return this.filteredData.slice(startIndex, endIndex);
    },
},

3、在mounted钩子中,初始化了tableData和filteredData,并将它们设置为示例数据。你可以根据实际情况从后端获取数据。
4、在methods中,添加了searchTextFun 方法来根据搜索文本过滤数据,并重置当前页码为第一页。若是在调用接口方法获取数据后调用searchTextFun即可。这里用的是name1字段,可视情况改变:item.name1.includes(this.searchText)
.filter()方法直达站

mounted () {
    this.filteredData = this.tableData;
    this.searchTextFun();
},
methods: {
    // 根据搜索文本过滤数据
    searchTextFun () {
      this.filteredData = this.tableData.filter(item =>
        item.name1.includes(this.searchText)
      );//过滤数据
      this.currentPage = 1; // 重置当前页码为第一页
    },
}

5、在watch中,监听searchText的变化,并在变化时执行搜索操作。

watch: {
    searchText () {
      // 监听搜索文本变化,执行搜索操作
      this.searchTextFun();
    },
  }

这样,当用户输入搜索文本并提交时,表格会根据搜索结果显示相应的数据,并自动根据新的参数重新渲染分页组件。

全部代码

<template>
  <div class="textbox-class">
    <div class="topbox-class">
      <el-input placeholder="搜索姓名"
                prefix-icon="el-icon-search"
                v-model="searchText"
                class="mleft-class searchinput-class">
      </el-input>
    </div>
    <div class="mainbox-class">
      <el-table :data="displayData"
                stripe
                border
                :header-cell-style="{background:'rgb(113 167 228)',color:'white'}"
                highlight-current-row
                style="width: 50%">
        <el-table-column prop="ID"
                         label="ID">
        </el-table-column>
        <el-table-column prop="name1"
                         label="姓名1">
        </el-table-column>
        <el-table-column prop="name2"
                         label="姓名2">
        </el-table-column>
        <el-table-column prop="name3"
                         label="姓名3">
        </el-table-column>
        <el-table-column prop="name4"
                         label="姓名4">
        </el-table-column>
      </el-table>
    </div>
    <div class="botbox-class">
      <el-pagination @size-change="handleSizeChange"
                     @current-change="handleCurrentChange"
                     :current-page="currentPage"
                     :page-sizes="[10]"
                     :page-size="pageSize"
                     layout="total, sizes, prev, pager, next, jumper"
                     :total="tableData.length"></el-pagination>
    </div>
  </div>
</template>

<script>
import jsondata from './test.json';
export default {
  data () {
    return {
      tableData: jsondata,
      currentPage: 1, // 当前页码
      pageSize: 10, // 每页显示的数量
      searchText: '', // 搜索的文本
      filteredData: [], // 搜索后的数据
    };
  },
  created () { },
  computed: {
    displayData () {
      // 根据当前页码和每页数量计算显示的数据
      const startIndex = (this.currentPage - 1) * this.pageSize;
      const endIndex = startIndex + this.pageSize;
      return this.filteredData.slice(startIndex, endIndex);
    },
  },
  mounted () {
    this.filteredData = this.tableData;
    this.searchTextFun();
  },
  methods: {
    // 改变每页显示的数量时触发
    handleSizeChange (newSize) {
      this.pageSize = newSize;
      this.currentPage = 1; // 重置当前页码为第一页
    },
    // 改变当前页码时触发
    handleCurrentChange (newPage) {
      this.currentPage = newPage;
    },
    // 根据搜索文本过滤数据
    searchTextFun () {
      this.filteredData = this.tableData.filter(item =>
        item.name1.includes(this.searchText)
      );
      this.currentPage = 1; // 重置当前页码为第一页
    },
  },
  watch: {
    searchText () {
      // 监听搜索文本变化,执行搜索操作
      this.searchTextFun();
    },
  }
};
</script>

<style scoped>
.textbox-class {
  width: 100%;
  height: 100%;
}
.topbox-class {
  height: 5%;
  display: flex;
  align-items: center;
  margin-left: 0.5rem;
}
.mainbox-class {
  height: 55%;
}
.botbox-class {
  height: 3%;
}
.searchinput-class {
  width: 20%;
}
</style> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1232889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android File Transfer(安卓文件传输工具)

Android File Transfer 是一款安卓文件传输工&#xff0c;它允许在Mac操作系统和Android设备之间进行文件传输。 该软件通过USB连接将文件从Mac电脑传输到连接的Android设备&#xff0c;或者反过来从Android设备传输文件到Mac电脑。这包括照片、视频、音乐、文档和其他文件类型…

最新企业服务总线ESB的国内主要厂商和开源厂商排名,方案书价格多少

企业服务总线ESB是什么&#xff1f; ESB平台&#xff08;企业服务总线&#xff0c;Enterprise Service Bus&#xff09;是一种企业级集成平台&#xff0c;它提供了一种开放的、基于标准的消息机制&#xff0c;通过简单的标准适配器和接口&#xff0c;来完成粗粒度应用&#xff…

Qt程序打包成.exe可执行文件

1.使用Release进行编译 2.找到编译成功的地址: 找到对应的目录 3.把SerialTool.exe文件单独复制到一个文件夹,这里我直接在桌面创建一个SerialTool文件夹,这时候直接运行是不行的,我们需要把库都导进去 4. 在安装目录找到如下这个文件,点击打开,找到你电脑对应的版本即可,我这…

数据仓库:架构之详解Kappa和Lambda

目录 一、前言 二、架构详解 1 Lambda 架构 1.1 Lambda 架构组成 1.2 Lambda 特点 1.3 Lambda 架构的优点 1.4 Lambda 架构的不足 2 Kappa 架构 2.1 Kappa 架构的核心组件 2.2 Kappa 架构优点 2.3 Kappa 架构的注意事项 三、区别对比 四、选择时考虑因素 一、前言 …

录屏软件自动开启录视频,是如何实现的?

工作要留痕&#xff0c;作为职场人的一项必备技能&#xff0c;因此许多人在做一些重要操作的时候&#xff0c;就会提前开启录屏软件&#xff0c;把操作的每一个步骤进行录制&#xff0c;以避免在出现问题的时候进行检查。当每天都需要在固定的时间点重复某项工作的时候&#xf…

【AI实用技巧】GPT写sql统计语句

编写sql的统计语句是一项复杂的任务&#xff0c;特别是涉及多表的情况下。但有了GPT的帮助&#xff0c;一切变得轻松愉快。 AI7号 - 最强人工智能&#xff08;GPT&#xff09;中文版https://ai7.pro/s/9v2um 举例说明 有表结构如下&#xff1a; users(user_id, name) bills(…

家具生产ERP有哪几种?如何选择家具生产ERP

不同种类的家具产品有差异化的原材料和制造工艺&#xff0c;每道生产工艺又有不同的管理模式和难点&#xff0c;有些家具生产企业内部还存在各个业务环节信息传递不畅、财务核算不清、不能实时获取库存动态数据等情况。 形成对比的则是部分家具生产企业引入ERP系统完成数字化全…

「C++」虚函数与多态

&#x1f4bb;文章目录 &#x1f4c4;前言虚函数概念虚函数重写虚函数的协变 重载、覆盖&#xff08;重写&#xff09;、隐藏&#xff08;重定义&#xff09;的对比 多态多态的概念多态的定义与实现多态的类型多态的构成条件抽象类 多态的原理虚函数表 多继承中的虚函数表 &…

数字化转型背景下,企业如何做好知识管理?

在当今数字化转型的时代&#xff0c;企业面临着日益复杂和快速变化的商业环境。知识管理成为了企业成功的关键之一。有效地管理和利用知识资源可以提升企业的创新能力、决策质量和竞争力。以下我列了一些关键的点&#xff0c;讲讲在数字化转型背景下&#xff0c;企业如何可以做…

21款奔驰GLE350升级香氛负离子车载香薰

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置&#xff0c;也可以单独加装香氛系统或者是负离子发生器&#xff0c;香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中&#xff0c;而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…

浪潮信息云峦服务器操作系统KeyarchOS体验与实践

写在前面 大家好我是网络豆&#xff0c;一名云计算运维人员&#xff0c;本文将会带大家体验一下浪潮信息服务器操作系统云峦KeyarchOS。看看浪潮信息服务器操作系统云峦KeyarchOS的优势与实践操作如何。 背景了解 KeyarchOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术…

【Python测试开发】:切换窗口和表单

一、多窗口切换 浏览器打开的窗口其实会有一个叫做句柄的概念。 句柄就类似于每一个标签页的ID一样&#xff0c;具有唯一性。 1.1 语法 获取当前窗口句柄&#xff0c;注意后面没有括号哦~ driver.current_window_handle获取所有窗口句柄&#xff0c;结果以列表格式存储&am…

『亚马逊云科技产品测评』活动征文|开发一个手机官网

『亚马逊云科技产品测评』活动征文&#xff5c;开发一个手机官网 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 …

java系列之 页面打印出 [object Object],[object Object]

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

心梗救治日:我希望他们都能活着到急诊

点击文末“阅读原文”即可参与节目互动 后期 / 朱峰 监制 / 姝琦 运营 / 卷圈&#xff0c;Sand 封面 / 姝琦midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 联合制作 / 美国心脏协会 当意外发生&#xff0c;这期节目可能会让你从手足无措&#xff0c;变成应对有序。 …

Geovia 2022 新功能

​GEOVIA是达索系统3DEXPERIENCE平台旗下品牌产品之一。GEOVIA目前侧重于矿业工程行业&#xff0c;主要用于地理空间大场景建模与仿真模拟&#xff0c;提高整个自然资源部门的可预测性、效率、安全性和可持续性。 新增功能介绍 01.角色更新 达索系统于2021年11月发布了GEOVIA…

国学短剧《我是小影星》栏目火热开拍

近日&#xff0c;国学短剧《我是小影星》栏目花絮拍摄&#xff0c;在上海市徐汇区漕溪路595号A座B1层开拍。该节目招募全国各地的有才华&#xff0c;有表现力怀揣梦想的小朋友来参与节目拍摄。节目旨在以中华传统文化为切入点&#xff0c;通过戏剧、歌舞、音乐等多种艺术形式的…

解析紫光展锐T820 5G芯片——让照片接近原色

紫光展锐系统级安全的高性能5G SoC芯片平台T820&#xff0c;采用八核CPU架构&#xff0c;6nm EUV先进工艺&#xff0c;金融级全内置安全方案&#xff0c;在性能、功耗与5G通信体验等方面&#xff0c;较上一代产品更为出色。 此前&#xff0c;已经为大家讲解过T820的拍照、安全性…

为什么我学了 6 个月 Python,还是找不到工作?

在知乎上有一个特别火的问题&#xff1a; 为什么学了Python&#xff0c;我还是找不到工作&#xff1f; 有人说Python语言不行&#xff0c;有人说中国Python根本就没公司用。在大家群嘲的背后&#xff0c;我们来分析一下&#xff1a; 为什么大家都不看好Python&#xff1f; 学…

hadoop 日志聚集功能配置 hadoop(十一)

由图所示&#xff0c;本文主要是将三台机器log 进行日志聚集查看。图更加直观 1. 首先需要配置历史服务器配置&#xff0c;才可以配置日志聚集功能&#xff1a; hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)-CSDN博客 2. 配置了三台服务器&#xff0c;hadoop22, ha…