el-table分页全选功能

el-table分页全选功能

今天和大家一起学习一个el-table 分页全选的功能
我们在用el-table组件的时候,肯定会用到分页功能,不管是长列表下拉分页还是用element-UI的el-pagination分页。
但是我们在具有选择功能的el-table的时候,会遇到一个问题,在点击进行分页之后,之前选择的数据没了,这个问题真的是困扰我良久。

在初期我用的办法是,在el-table中,通过 @select=“changeSelect”@selection-change=“handleSelectStockChange”,这个方法有bug。


changeSelect(selected, row) {  //selected:选中的数据组成的数组,row:最后一次点击的那个数据对象
      this.selectList = row;
      this.isInSelectList = selected.indexOf(row); //判断row在不在selected里面,即row这条数据是否被选中
    },
handleSelectStockChange(val) {   //val的格式[{code:1,name:'小明'},{code:1,name:'小明'}]
      let stockSelectlist = [];
      val.forEach((el) => {
        stockSelectlist.push(el.code);   //获取所有code组成的数组
      });
      this.SelectStock = stockSelectlist;   //将获取的数据保存一下
      this.SelectStock.push(...stockSelectlist);   //分页之后重新选择的数据进行追加
      this.SelectStock = _.uniqWith(this.SelectStock, _.isEqual);   //lodash库里面的去重方法,注意:需要import _ from 'lodash',不需要安装依赖,脚手架自带,可以直接使用
      if (this.isInSelectList == -1) {  // 当这个值为-1时,说明是进行的取消选中的操作,因此将这条数据剔除
      	this.SelectStock = this.SelectStock.filter((el) => {
      		return el != this.selectList.code;
      	});
      }

这个方法可以实现,但是在交互样式上会出现问题,就是再次点击回到之前页时,数据虽然已经被选中了,但是页面上显示的是未选中。
各位大佬们,如估计这个有解决办法,欢迎评论。

在后面的我又开始面向百度开发,找到一个没有bug的方法,是看谁的,我忘了(狗头保命)
这个方法是:
在el-table中,通过 @selection-change=“handleSelectStockChange”:row-key=“getRowKeys”
在第一行,也就是多选框的那一列上,加上 :reserve-selection="true"

// HTML 代码
<el-table
   ref="selectTable"
   :data="resultList"
   v-loading="selectLoading"
   tooltip-effect="dark"
   style="width: 100%"
   @selection-change="handleSelectStockChange"
   :row-key="getRowKeys"
   >
      <el-table-column
         type="selection"
         width="55"
         :reserve-selection="true"
      >
      </el-table-column>
      <el-table-column label="股票名称" prop="name">
         <template slot-scope="scope">{{ scope.row.name }}</template>
      </el-table-column>
      <el-table-column prop="code" label="股票代码">
         <template slot-scope="scope">{{ scope.row.code }}</template>
      </el-table-column>
</el-table>

// js代码,在methods里面
getRowKeys(row) {
    return row.code;
},
handleSelectStockChange(val) {
   let stockSelectlist = [];
   val.forEach((el) => {
      stockSelectlist.push(el.code);
    });
    this.SelectStock = stockSelectlist;
},

最终结果
第一次点击,选中一个
el-table分页全选功能_第1张图片
更换搜索条件之后,之前选中的数据依旧选中
el-table分页全选功能_第2张图片
这个技术就能完美实现了

你可能感兴趣的:(elementui,vue.js,javascript)