el-table实现跨页全选

代码如下

javascript 复制代码
<template>
    <div>
        <el-table
        ref="myTable"
        :data="tableData.slice((currentPage - 1) * pagesize, currentPage * pagesize)" 
        tooltip-effect="dark"
        style="width: 100%"
        @selection-change="handleSelectionChange"
        @select-all="selectAll" >
        <el-table-column
          type="selection"
          width="55">
        </el-table-column>
        <el-table-column
          label="日期"
          width="120">
          <template slot-scope="scope">{{ scope.row.date }}</template>
        </el-table-column>
        <el-table-column
          prop="name"
          label="姓名"
          width="120">
        </el-table-column>
        <el-table-column
          prop="address"
          label="地址"
          show-overflow-tooltip>
        </el-table-column>
      </el-table>
      <div style="margin-top: 30px">
        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" 
        :page-sizes="[5,10,30, 50, 100]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper"
        :total="tableData.length"></el-pagination>
      </div>
    </div>
   
  </template>
  
  <script>
    export default {
      data() {
        return {
        //是否全选
            isAllSelected:false,
          //选中的exId集合
          selectList:[],
          tableData: [{
            exId:1,
            date: '2016-05-03',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            exId:2,
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            exId:3,
            date: '2016-05-04',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            exId:4,
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            exId:5,
            date: '2016-05-08',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            exId:6,
            date: '2016-05-06',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            exId:7,
            date: '2016-05-07',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }],
          total: 0,
          currentPage: 1, //初始页
          pagesize: 5, //    每页的数据
        }
      },
  
      methods: {
        selectAll(selection) {
      this.isAllSelected=!this.isAllSelected
      if((selection.length&&this.isAllSelected) || (!selection.length&&!this.isAllSelected)){
       // 全选
           this.tableData.forEach(item=>{
               if(!this.selectList.some(items =>  items == item.exId)){
                   this.selectList.push(item.exId)
               }
           })
       }else{
           // 全不选
           this.tableData.forEach(item=>{
               let index = -1
               this.selectList.some((items,i)=>{
                   if(items == item.exId){
                       index = i
                   }
               })
               if(index > -1) this.selectList.splice(index,1)
           })
           //清除选中的状态
           this.$refs.myTable.clearSelection()
       }
   
     },
   handleSizeChange: function (size) {
      this.pagesize = size;
    },
    handleCurrentChange: function (currentPage) {
      this.currentPage = currentPage;
      //  this.$nextTick这段代码可以写在后端获取列表之后,用来解决切换页面,checkbox没有被选中的问题,如果是全选状态,切换页面checkbox设置为选中状态
           this.$nextTick(()=>{
               this.tableData.forEach(item=>{
                   if((!this.selectList.includes(item.exId)&&this.isAllSelected) || (!this.isAllSelected && this.selectList.includes(item.exId))){
                       this.$refs.myTable.toggleRowSelection(item,true)
                   }else{
                       this.$refs.myTable.toggleRowSelection(item,false)
                   }
               })
           })
    },
    handleSelectionChange(val) {
            this.selectList = val.map((item) => item.exId);
        }
      }
    }
  </script>
相关推荐
To_OC8 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
To_OC9 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
小林ixn10 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
এ慕ོ冬℘゜10 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
随心点儿11 小时前
js postMessage 实现跨域发送消息-应用示例
javascript·ecmascript·postmessage
kyriewen12 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
慧一居士14 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
gis开发之家17 小时前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码
橘子星18 小时前
我一个前端切图仔,凭什么能在浏览器里跑大模型?
前端·javascript·前端框架
半个落月18 小时前
用 LangChain JS 做可控写作实验:理解温度参数、提示词与异步调用
javascript·人工智能·后端