业务场景

在使用Element UI的Table组件时,常常面对这样的业务需求:

表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能。并且,表格下方实时统计已勾选数据的项数、重量、金额等。

“弯路”分析

我们可能会走“弯路”,使用过于复杂的逻辑去实现。常见的弯路是:

在Vue的data里面存储已勾选数据的数组,而后基于table的selection-change或select、select-all事件去动态修改已勾选数组的数据。切换分页时,遍历当前页面数据判断每一条是否在已勾选数组中,若在,则使用toggleRowSelection手动去设置每条数据的勾选状态。

使用以上方式或者类似方式肯定能够实现目标,但需要考虑的问题过多,过于繁琐,例如:

  • 使用一维数组还是二维数组存储数据?各有何优劣?
  • 存储每条数据的id还是整条数据?各有何优劣?
  • select、select-all、selection-change这几个事件之间如何抉择?
  • toggleRowSelection方法的调用时机?若是只存储了id,又该如何调用该方法?

事实上,这将使得记忆勾选和统计功能显得过于复杂,很容易出现bug,想要完全厘清并不容易。

推荐解决方案:row-key、reserve-selection、@selection-change

Element UI官网并没有提供直接的demo用于展示如何实现上述业务场景,但文档中却隐晦的表露出通过设置一些属性和方法是可以较为简洁的实现目标的。

基于table的两个属性row-key、reserve-selection和一个事件selection-change即可以非常简洁的实现。

(一)给el-table绑定row-key属性

row-key属性实际的作用是标识表格每行数据是通过哪个属性来进行区别的,一般而言id比较常见。

 <el-table :data="tableData" border row-key="id"></el-table>

绑定了row-key属性后,即便跨页,由于不同页数据的id不同,因此组件依然可以进行区分从而实现记忆。

(二)给type=selection的el-table-column设置reserve-selection属性

reserve-selection的作用是在数据更新之后保留之前选中的数据。它和勾选是密切相关的,因此必须设置在type=selection的那一列上,只需简单绑定true即可。

<el-table-column type="selection" width="55" :reserve-selection='true'>
</el-table-column>

现在已经能够实现记忆勾选,但无法进行勾选统计,因此还需要进行第三步。

(三)给el-table绑定selection-change事件

这一步的目的在于存储所有已勾选的数据,以实现对已勾选数据的计算。有了前两步的设置,selection-change返回的参数selection将是所有页面已勾选的数据,这使我们的问题变得异常简单。

 <el-table :data="tableData" border row-key="id"
@selection-change="handleSelectionChange"></el-table>
export default {
data(){
return {
tableData:[],
selectedData:[]
};
},
methods:{
handleSelectionChange(rows){
this.selectedData = rows;
}
}

(四)使用计算属性实现统计

由第三步可知,selectedData保存了所有页面的已勾选数据,因此我们只需要使用计算属性对selectedData进行计算即可实现统计。

export default {
data(){
return {...};
},
methods:{...},
computed:{
checkedWeight(){
let totalWeight = 0;
this.selectedData.forEach(item =>{
totalWeight += item.weight;
});
return totalWeight.toFixed(2);
}
}
}

而后在视图中绑定计算属性即可完成。

Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能的更多相关文章

  1. 封装一个优雅的element ui表格组件

    现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...

  2. [转]vue Element UI走马灯组件重写

    https://blog.csdn.net/u013750989/article/details/82885482 1.element ui走马灯组件 -- carousel分析一波源代码:carou ...

  3. element ui 表格提交时获取所有选中的checkbox的数据

    <el-table ref="multipleTable" :data="appList" @selection-change="changeF ...

  4. vue + element ui 表格自定义表头,提供线上demo

    前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...

  5. Element UI table组件源码分析

    本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...

  6. vue2.0+Element UI 表格前端分页和后端分页

    之前写过一篇博客,当时对element ui框架还不太了解,分页组件用 html + css 自己写的,比较麻烦,而且只提到了后端分页 (见 https://www.cnblogs.com/zdd20 ...

  7. 普通element ui table组件的使用

    1.使用基础的element ui 的table的基础使用 首先,使用前要先引用element库到项目中,可以直接引入element的js和css或者在vue项目下按需加载不同的组件 废话不多说,直接 ...

  8. element ui step组件在另一侧加时间轴显示

    这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...

  9. element UI表格行高、padding等设置报错问题

    element UI里面表格的行高需要自己调整高度和设置padding,直接写style是不行的,里面有 : 1.row-style (行的 style) 2.header-row-styl   (表 ...

随机推荐

  1. python--django中一些有用的工具引入路径

    django.shortcuts render:渲染前端页面 redirect:跳转到其他页面 django forms:表单验证 # 定义 class Form(forms.Form): name ...

  2. flask-redirect

    flask-redirect from flask import Flask, url_for, request, redirect app = Flask(__name__) @app.route( ...

  3. 路由与交换,cisco路由器配置,静态路由

    网络是一个大型的拓扑结构,在路由表中,最重要的是管理距离和度量值 管理距离 管理距离用来确定路由的优先级.管理距离的范围是0-255之间的整数值.值越低代表优先级越高.0代表最高优先级.并且只有直连路 ...

  4. 在IDEA导入maven项目

    1.依次打开File—New—Module from Existing Sources...

  5. scp 使用方法

    scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令.有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要 ...

  6. python3(三十三)debug

    """ 调试 """ __author__on__ = 'shaozhiqi 2019/9/23' # 调试程序 # . print打印,没 ...

  7. zookeeper的下载安装和选举机制(zookeeper一)

    1. 简要概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的框架.Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的 ...

  8. lr组织架构模式

    基本模式:默认目录由三部分组成 Vuser_int Action,…… Vuser_end 执行时会按照这三个顺序执行(Action部分是可以循环的,也可多个action) 1.lr12录制前可以设置 ...

  9. 【python实现卷积神经网络】Flatten层实现

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  10. x86汇编之栈与子程序调用

    什么是栈 栈与普通数据结构所说的栈的概念是相似的,遵循后进先出原则.不同的是汇编中所说的栈是一个在内存中连续的保存数据的区域,也即是实际存在的内存区域,进栈和出栈遵循后进先出原则. 在x86架构中,栈 ...