element表格多选实现

表格实现多选

实现表格多选很简单,只需要在表格里加上一列即可,加完之后就会在表格里出现一列白色的四方块按钮,可以多选,也可以单选

      <el-table-column
        type="selection"
        width="55"
        align="center"
      >

element表格多选实现_第1张图片

那么,如何获取选中的数据呢,官方文档提供了三种钩子函数,但是一个就可以满足需求了,在表格设置中加上selection-change 这个事件,其功能为:只要选中的数据发生改变,那么就会触发这个函数

    <el-table
      :data="tableData"
      style="width: 100%; margin-top: 10px"
      :border="true"
      v-loading="loading"
      @selection-change="handleSelectionChange"
    >

函数具体内容如下:

    handleSelectionChange(val) {
      // val拿到的是选中行的全部数据,而this.multipleSelection是把val以对象装在数组中
      this.multipleSelection = val;
      console.log(this.multipleSelection);
      // 每次都清空存储的数据,并装入新数据
      this.SelectionList = [];
      for (const val of this.multipleSelection) {
        for (const key in val) {
          if (key === "id") {
            this.SelectionList.push(val[key]);
          }
        }
      }
      // 在遍历之后转换为字符串,因为这里后端要的值只有行id,因此就全部转为字符串后发给后端
      this.ROWids = this.SelectionList.toString();
      console.log("this.ROWids", this.ROWids);
    },
        
  //具体要什么值,需要根据实际开发情况而定,而该函数直接获取到所有选中行的所有数据,就很nics,想要什么就取什么就可以了。

到这里为止,就已经完成了多选以及获取选中的数据

val获取的值,multipleSelection存储的值以及转化之后的ROWids字符串如下:

element表格多选实现_第2张图片

实现不同页一起选中

之前所做的工作,仅仅只能在当前页进行选中,获取选中的数据,而不能实现换页一起选中,点击下一页之后,之前选中的数据就丢失了。而为了解决这个问题,那么就可以在表格的设置中添加:row-key="id" 属性,以及在多选列中添加 :reserve-selection="true" 即可,其会实现存储功能,让不同页之间也可以实现一起选中

    <el-table
      :data="tableData"
      style="width: 100%; margin-top: 10px"
      :border="true"
      row-key="id"
      v-loading="loading"
      @selection-change="handleSelectionChange"
    >
      <el-table-column
        type="selection"
        width="55"
        align="center"
        :reserve-selection="true"
      >

控制表格选中数据清空

截止上一步为止,我们并没有实现通过代码清空选中行的功能,而只能在页面中通过手动的方式去取消之前选中的行;设想,我已经完成了对所选行的操作,例如查询,导出等操作,那么操作完成之后一定会再次请求接口刷新页面,而选中的标志却并没有消失,这就很影响用户体验;

而可以这样进行解决,我们只需要在表格的设置中添加 ref="multipleTable" 然后在想要清空选中数据的回调处(如查询数据结束之后的回调)在通过 this.$refs.multipleTable.clearSelection(); 即可完成清空选中数据的操作,nics!!!

    <el-table
      :data="tableData"
      ref="multipleTable"
      style="width: 100%; margin-top: 10px"
      :border="true"
      row-key="id"
      v-loading="loading"
      @selection-change="handleSelectionChange"
    >

javascript代码

    ReturnFace() {
      if (this.ROWids == []) {
        this.$message({
          message: "未选中数据,不予检测!!!",
          type: "warning",
        });
      } else {
        let data = {
          ids: this.ROWids,
        };
        this.$confirm("是否进行人脸下发检测?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(function () {
            return ReturnPeopFace(data);
          })
          .then(() => {
            this.getList();
            this.msgSuccess("人脸下发检测成功!");
            this.$refs.multipleTable.clearSelection();
          });
      }
    },

表格实现一键选中所有数据

截止目前,所做的工作实际上是:可以实现同页、不同页多选;一键选中当前页的所有行;以及在自己想要的回调处清空自前选中的行;

但是,却并没有实现一键选中所有的数据,这是为什么呢?是因为当数据量比较多的时候,数据会进行分页展示,例如有30条数据,每页在初始化时展示10条,第二页甚至第三页数据其实是没有获取的,该策略被称之为是懒加载,可以大大缩短求情时间,提升用户体验。只有点击第二页的时候,才会获取第二页的数据进行展示。所以呢,要想一键选中所有页的数据,还需要做一些特殊的骚操作才行。

(持续更新中…)

你可能感兴趣的:(Element-UI,javascript,前端,vue.js)