el-table跨页多项选中

本文意在解决用 element-ui 中 table 时,需要选中行,并且结合分页做翻页操作时,保留之前所有选中状态的数据

html部分

<!-- html代码块 -->
<!-- 表体 -->
<el-table
    ref="multipleTable"
    :data="tableData"
    row-key="index"
    @selection-change="selectionChange">
    <el-table-column type="selection" :reserve-selection="true" fixed="left" />
    <el-table-column prop="index" label="序号"  />
    ...
</el-table>	
<!-- 分页 -->
<el-pagination
    layout="total, sizes, prev, pager, next"
    :current-page.sync="currentPage"
    :page-size="pageSize"
    :total="total"
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"></el-pagination>
  • el-table中要设置row-key,并设置tableData中的唯一值,比如index(若不设置时方法不生效、设置错误或值不唯一时控制台会报错);
  • el-table-column中的selection选框列设置reserve-selection为true(数据更新之后保留之前选中的数据)

js部分

// js代码块
selectionChange(val){
  this.tableSelectList = val
}
  • 该方法在选中状态改变时(选中、取消)触发,可拿到选中行的全量数据供某些功能使用,比如:接口数据提交

拓展

表格配合表单查询时(或其他类似操作),每次执行查询需要将选中列表清除,但翻页时不清除

// js代码块
search(clean = true){
  this.tableData.splice(0) // 每次先将表格数据清除
  getTableData({ // 模拟接口
    ...data // 表单数据
  }).then(res => {
    this.tableData = res.List
    this.total = res.Total
    clean && this.$refs.multipleTable && this.$refs.multipleTable.clearSelection() 
    // clean 为 true 时清除选中,分页时传 false 则不会触发
  }  
},
handleSizeChange(val){
  this.pageSize = val
  this.currentPage = 1 // 改变页容,先将当前页码归 1
  this.search(false)
},
handleCurrentChange(val){
  this.currentPage = val
  this.search(false)
},

其实严格来说每次执行查询也要将当前页归1,此处就省略啦(狗头保命 o.0)

A: el-table择时,需要借助el-pagination组件来实现。具体实现代码如下: 1. 在template中创建el-table组件和el-pagination组件,并设置相关的属性: ``` <el-table :data="tableData" @selection-change="handleSelectionChange"> <!-- 表格列 --> </el-table> <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" :total="total"> </el-pagination> ``` 2. 在script中,定义相关的变量和方法: ``` data() { return { tableData: [], // 表格数据 currentPage: 1, // 当前码 pageSize: 10, // 每显示数量 total: 0, // 数据总数 selectionData: [], // 择的数据 multipleSelection: [] // 的数据 } }, methods: { // 监听分码变化,更新表格数据 handlePageChange(val) { this.getTableData(val) }, // 监听表格选中项变化 handleSelectionChange(val) { this.selectionData = val }, // 获取表格数据 getTableData(page) { // 根据码和每数量请求相应的数据 // 更新tableData和total }, // 清空择的数据 clearSelection() { this.$refs.table.clearSelection() }, // 处理 handleMultipleSelection(selection) { // 如果是在同一 if (this.multipleSelection.length > selection.length) { this.selectionData = this.selectionData.filter(item => selection.find(s => s.id === item.id) ) } else { selection.forEach(item => { if (!this.selectionData.find(s => s.id === item.id)) { this.selectionData.push(item) } }) } this.multipleSelection = selection }, // 全 handleSelectAll(status) { if (status) { this.$refs.table.toggleAllSelection() this.selectionData = this.tableData.slice() } else { this.clearSelection() } } } ``` 3. 通过监听el-table组件的事件实现择: ``` <el-table :data="tableData" @selection-change="handleSelectionChange" @select-all="handleSelectAll" @select="handleMultipleSelection"> <!-- 表格列 --> </el-table> ``` 通过以上实现,el-table就能够实现择了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值