vue3:el-table多选框设置默认选中,翻页保留选中状态

问题:el-table多选框设置默认选中,进行翻页,之前选中的数据没有保留选中状态

   <template>
    <el-table
      style="width: 100%"
      border
      :data="state.usersData"
      @selection-change="userSelectionChange"
      ref="multipleTable"
      :row-key="getRowKeys"
    >
      <el-table-column type="selection" width="55" :reserve-selection="true" />
      <el-table-column property="nickName" label="用户名" />
      <el-table-column property="name" label="姓名"  />
      <el-table-column property="mobile" label="手机号"/>
      <el-table-column property="email" label="邮箱"/>
    </el-table>
    <el-pagination
      :current-page="state.paramData.page"
      :page-size="state.paramData.pageSize"
      :page-sizes="[5, 10, 20, 50]"
      layout="total, sizes, prev, pager, next, jumper"
      :background="true"
      :total="state.total"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
    </template>
    <script setup>
    import {watch,reactive,ref} from "vue"
    import { getUsers} from "@/api/course.js";
const state=reactive({
   tableData:[],
   selectedData:[],
   paramData:{
     page:1,
     pageSize:10
      },
    total:0
    })
    watch(
  () => state.paramData,
  () => {
    getUserMessage();
    reserveSelection();
  },
  { deep: true }
);
    //获取表格数据
const getMessage=async ()=>{
         const {data}=await getUsers();
         state.tableData=data;
    }
    //用户数据反显(默认选中)
const multipleTable = ref();
const reserveSelection = () => {
  if (selectData.value.length !== 0) {
    selectData.value.forEach((item) => {
      setTimeout(() => {
        multipleTable.value.toggleRowSelection(item, true); //让页面显示选中的数据
      }, 0);
    });
  }
};
//指定key值,数据更新之后保留之前选中的数据
const getRowKeys = (row) => {
  return row.userId;
};

const handleCurrentChange = (val) => {
  state.paramData.page = val;
};
const handleSizeChange = (val) => {
  state.paramData.pageSize = val;
};
const userSelectionChange = (values) => {
  state.selectedData = [...values];
};
        
    </script>

总结步骤:
1.在el-table标签中加入:row-key=“getRowKeys”
2.在el-table-column中的第一行加入type=“selection” 和:reserve-selection=“true”
3.使用el-table 中的 toggleRowSelection 方法,其中该方法的第二个参数设置为true则为选中

注意:在使用toggleRowSelection方法时要在异步操作(setTimeout或nextTick)里面进行,因为当数据发生变化后,vue的依赖监听并更新视图过程是异步进行的,所以此时视图更新任务还在等待,此时通过ref操作dom是无效的

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值