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>
相关推荐
速易达网络1 小时前
Three.js 动画入门教学:从场景搭建到流畅动效
开发语言·javascript·ecmascript
Hilaku2 小时前
CORS 到底在保护谁?90% 的前端理解错了跨域的本质
前端·javascript·程序员
华玥作者2 小时前
Vue 3 + TypeScript + uni-app 组件库推荐:hy-app(华玥组件库)
vue.js·typescript·uni-app
阿琳a_2 小时前
b-map-viewer:面向 Vue 3 的地图可视化 SDK,从接入到展示再到交互分析
前端·javascript·vue.js·gis·数据可视化·地图
Captain1314_李祖团3 小时前
5. MLIR相关语法
java·前端·javascript
齐 飞3 小时前
VUE2常用语法总结
javascript·vue.js
Data analyse4563 小时前
web-vitals库接入:LCP、INP、CLS上报与阈值
前端·javascript·数据分析
北城笑笑3 小时前
Vue 106 ,上篇:前端桌面端应用实现方案( Electron 框架详细介绍,Vue + Electron )
前端·javascript·vue.js·python·electron
柳杉4 小时前
别再手抠特效帧了:一个能"看图改图"的像素特效库 + Claude Code Skill
前端·javascript
前端小D4 小时前
React Native项目开发(iOS侧为例)
javascript·react native·react.js