element ui el-table展示列表,结合分页+过滤功能

vue+element-ui实现的列表展示,列表分页,列表筛选功能

1,分页器

el-table模块下面是分页器代码 <el-pagination></el-pagination>

<el-table></el-table>
<!-- 分页器 --><div class="block" style="margin-top:15px;margin-left:60%" v-if="tableData"><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="currentPage":page-sizes="[10,20,30,40,50,100]":page-size=10layout="total, prev, pager, next,jumper":total="tableData.length"></el-pagination></div>

分页器  layout 属性表示组件布局

设置layout,表示分页器需要显示的内容,用逗号分隔,布局元素会依次显示。prev表示上一页,next为下一页,pager表示页码列表,除此以外还提供了jumpertotalsize和特殊的布局符号->->后的元素会靠右显示,jumper表示跳页元素,total表示显示页码总数,size用于设置每页显示的页码数量。

size-change 表示处理页码大小

current-change表示页面变动时触发的事件

page-sizes接受整型数组,数组元素为展示的选择每页显示个数的选项,[100, 200, 300, 400]表示四个选项,每页显示 100 个,200 个,300 个或者 400 个。

current-change 表示当前页,接受一个初始值表示首页在第几页。

page-size 表示每页item个数

total表示总体item数,例子代码中赋值为tableData的长度

2,过滤器

过滤功能

在<el-table-column>中设置filters,filter-method属性即可开启该列的筛选,filters 是一个数组,filter-method是一个方法,它用于决定某些数据是否显示,会传入三个参数:value, row 和 column

用例代码:

<template><el-table:data="tableData"style="width: 100%"><el-table-columnprop="date"label="日期"sortablewidth="180":filters="[{text: '2016-05-01', value: '2016-05-01'}, {text: '2016-05-02', value: '2016-05-02'}, {text: '2016-05-03', value: '2016-05-03'}, {text: '2016-05-04', value: '2016-05-04'}]":filter-method="filterHandler"></el-table-column><el-table-columnprop="name"label="姓名"width="180"></el-table-column><el-table-columnprop="address"label="地址":formatter="formatter"></el-table-column><el-table-columnprop="tag"label="标签"width="100":filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]":filter-method="filterTag"filter-placement="bottom-end"><template slot-scope="scope"><el-tag:type="scope.row.tag === '家' ? 'primary' : 'success'"disable-transitions>{{scope.row.tag}}</el-tag></template></el-table-column></el-table>
</template><script>export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',tag: '家'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄',tag: '公司'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄',tag: '家'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',tag: '公司'}]}},methods: {formatter(row, column) {return row.address;},filterTag(value, row) {return row.tag === value;},filterHandler(value, row, column) {const property = column['property'];return row[property] === value;}}}
</script>

 filters是数组形式,元素是object类型,包括text属性和value属性。text属性时过滤下拉后让选择的选项,选择后使用相应的value值去匹配。匹配的方法是filter-method。

筛选后,每行数据 row都会进行filter-method的判断。

filterHandler分析

filterHandler(value, row, column) {const property = column['property'];return row[property] === value;}

column['property']是当前列的prop属性值,比如如下代码,该column['property']是module。不设置该属性column['property']就是undefined,自然也无法选择出想要的数据。

  <el-table-columnprop="module":filters= "headFilters['module']":filter-method="filterHandler"label="模块"min-width="3%"> </el-table-column>

一般的比较都是return row[property] === value;即 每行的module属性值与选中的filter item的value值相等选中。

3,结合使用遇到的问题

问题一:如何实现,点击新的页码或者下一页,table数据变化为相应的数据

el-table组件和el-pagination组件其实是两个分开的组件。

他们的联系是通过tableData来进行的。分页组件其实是产生了很多属性及其值,比如当前页currentPage,pageSize当前页的展示数据量pageSize。所以,el-table的“:data”属性就是计算后的分页段的数据: 

<el-table v-if="tableData" :key="fresh_table" :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)" 

问题二:加上过滤功能后,如何使得分页正常工作

以上<el-pagination>和过滤器的设置,是不是就能正常工作了呢?会存在一个问题,比如一个列表,分页每页10条数据,然后筛选。第一页10条数据,符合筛选规则5条,会呈现5条数据。第二页10条数据有3条符合规则,会在第三页展示3条数据。就是筛选只在每页筛选,分页器的总条数还是筛选前的总数据条数。如何改变呢?

el-table 有filter-change属性

filter-change当表格的筛选条件发生变化的时候会触发该事件,参数的值是一个对象,对象的 key 是 column 的 columnKey,对应的 value 为用户选择的筛选条件的数组。filters

可以利用该参数,进行一个table的数据再计算。就是 <el-table v-if="tableData" :key="fresh_table" :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)" 的tableData是过滤后的结果。

可以这样实现:

el-table定义filter-change:

            <el-table v-if="tableData" :key="fresh_table" :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)" @filter-change="handleFilterChange" width="100%">

handleFilterChange实现:

handleFilterChange(value){if (!this.filterValue) {// 如果用户没有选择任何筛选条件,直接返回原始表格数据this.tableData=this.issues_detail;}// 使用 filter 方法过滤表格数据this.tableData=this.issues_detail.filter((row) => row[this.filterKey] === this.filterValue);this.fresh_table=!this.fresh_table},

其中变量 filterValue, filterKey,即fresh_table是定义在vue data对象中的变量:

  var history = new Vue({el: "#ss",data: {....filterValue:null,filterKey:null,fresh_table:true,tableData:null,.....},

filterValue, filterKey记录过滤的key-vlaue值,在filterHandler中赋值。

<el-table>
....<el-table-columnprop="module":filters= "headFilters['module']":filter-method="filterHandler"label="模块"min-width="3%"> </el-table-column>
.....
</el-table>.....
//位于vue的method中定义filterHandler(value, row, column) {const property = column['property'];this.filterValue=valuethis.filterKey=propertyreturn row[property] === value;},

以上fresh_table的使用,结合:key="fresh_table"  ,筛选完后改变其值使得列表更新,使用筛选后的tableData进行列表渲染

<el-table v-if="tableData" :key="fresh_table" :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)" @filter-change="handleFilterChange" width="100%">

以上基本就能实现分页+筛选列表功能,筛选后总体数量会变为符合筛选条件的数量,筛选结果分页。

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

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

相关文章

力扣每日一练(24-1-13)

如果用列表生成式&#xff0c;可以满足输出的型式&#xff0c;但是不满足题意&#xff1a; nums[:] [i for i in nums if i ! val]return len(nums) 题意要求是&#xff1a; 你需要原地修改数组&#xff0c;并且只使用O(1)的额外空间。这意味着我们不能创建新的列表&#xff…

【QT】标准对话框

目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3&#xff0e;选择已有目录 4&#xff0e;选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2&#xff0e;输入整数 3&#xff0e;输入…

Python教程(23)——Python类中常用的特殊成员

在Python中&#xff0c;类特殊成员是指以双下划线开头和结尾的属性和方法&#xff0c;也被称为魔术方法&#xff08;Magic methods&#xff09;或特殊方法&#xff08;Special methods&#xff09;。这些特殊成员在类的定义中具有特殊的语法和功能&#xff0c;用于实现对象的特…

【PlantUML】-类图-布局,如何改变元素位置

写在前面 PlantUML属于自动布局。掌握好&#xff0c;是一件利器&#xff0c;掌握不好&#xff0c;就会不知其所以然。尤其在布局方面&#xff0c;因为它的布局可能会和你想的不太一样。本篇文章以例子为基础&#xff0c;简单地说几个在实际应用过程中摸索出来的原则。相信看完这…

【猫头虎分享】全面揭秘鸿蒙4.0:华为的技术革新与市场影响

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

逆变器3前级推免(高频变压器)

一节电池标压是在2.8V—4.2V之间&#xff0c;所以24V电压需要大概七节电池串联。七节电池电压大概在19.6V—29.4V之间。 从24V的电池逆变到到220V需要升压的过程。那么我们具体需要升压到多少&#xff1f; 市电AC220V是有效值电压&#xff0c;峰值电压是220V*1.414311V 如果…

ssm基于Javaweb的物流信息管理系统的设计与实现论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统物流信息管理难度大&#xff0c;容错率低&#xff0c;管理…

数据结构——排序算法之快速排序

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。 基本思想&…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单&#xff0c;但必须记住一点&#xff1a;opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0&#xff0c;opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后&#xff0c;默认看到的是git分支&…

NAS搭建NextCloud集成OnlyOffice

1、安装NextCloud&#xff08;如果总是中断就换个镜像源&#xff09; 2、创建容器 如果需要穿透选HOST 端口必须80 读写必须开 3、启动容器并配置&#xff0c;看图。 启动看日志&#xff0c;等启动完成再访问。首次启动大约5-10分钟左右。 成功后&#xff0c;我们正常进行安装…

学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

背景 学习使用 XPath 表达式来实现找到目标元素时智能封装等待执行测试代码启动Chrome浏览器后&#xff0c;地址栏只显示data&#xff1b; 代码如下 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from …

6.2 声音编辑工具GoldWave5简介(5)

6.2.4录制声音 利用Windows自带的“录音机”录制声音时&#xff0c;只能录制最大时长为1分钟的声音&#xff0c;而利用GoldWave5&#xff0c;可以录制时长长达277小时以上的声音&#xff0c;而且&#xff0c;录制完成后&#xff0c;还可以很方便地对声音进行处理、转换等操作。…

记录用python封装的第一个小程序

前言 我要封装的是前段时间复现的一个视频融合拼接的程序&#xff0c;现在我打算将他封装成exe程序&#xff0c;我在这里只记录一下我封装的过程&#xff0c;使用的是pyinstaller&#xff0c;具体的封装知识我就不多说了&#xff0c;可以参考我另一篇博客&#xff1a;将Python…

NLP技术在搜索推荐场景中的应用

NLP技术在搜索推荐中的应用非常广泛&#xff0c;例如在搜索广告的CTR预估模型中&#xff0c;NLP技术可以从语义角度提取一些对CTR预测有效的信息&#xff1b;在搜索场景中&#xff0c;也经常需要使用NLP技术确定展现的物料与搜索query的相关性&#xff0c;过滤掉相关性较差的物…

力扣2182.构造限制重复的字符串

思路&#xff1a;先记录每个字符的出现次数&#xff0c;构建一个新字符串&#xff0c;从尾取字符&#xff0c;每取一个该字符个数-1&#xff0c;若该字符已经取到有repeatLimit个&#xff0c;则递归取次大的字符&#xff0c;并对应字符个数-1&#xff0c;若没有次大字符了&…

Elasticsearch基础篇(七):分片大小修改和路由分配规则

Elasticsearch基础篇(七)&#xff1a;分片大小修改和路由分配规则1. 分片1.1 主分片&#xff08;Primary Shard&#xff09;1.2 副本分片&#xff08;Replica Shard&#xff09;1.3 分片路由&#xff08;Routing Shard&#xff09; 2. 分片分配的基本策略3. 分片写入验证3.1 数…

2024年前端最新面试题-vue3(持续更新中)

文章目录 前言正文什么是 MVVC什么是 MVVM什么是 SPA什么是SFC为什么 data 选项是一个函数Vue 组件通讯&#xff08;传值&#xff09;有哪些方式Vue 的生命周期方法有哪些如何理解 Vue 的单项数据流如何理解 Vue 的双向数据绑定Vue3的响应式原理是什么介绍一下 Vue 的虚拟 DOM介…

设计模式-- 3.适配器模式

适配器模式 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色和职责 请求者&#xff08;client&#xff09;&#xff1a;客户端角色,需要使用适配器的对象&#xff0c;不需要关心适配器内部的实现&#xff0c;…

常用的检测数据异常值方式,以及异常数据如何处理!!

清除数据异常值 1.箱线图检测数据异常值方法2.3σ原则检测数据异常值方法3. 异常数据处理方式&#xff1a;总结&#xff08;小白看看就行&#xff09; 1.箱线图检测数据异常值方法 箱线图检测&#xff1a;箱线图是一种常用的异常值检测方法&#xff0c;它以数据的分位数为基础…

常见的加密算法

加密算法 AES 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥&#xff0c;具体的加密流程如下图&#xff1a; RSA RSA 加密算法是一种典型的非对称加密算法&am…