el-table多选表格实现初始时、翻页时记忆历史选项功能

重点代码以及逻辑:

<el-table
	row-key="id"
    @selection-change="handleSelectionChange">
    <el-table-column
      	 prop=""
         type="selection"
         :reserve-selection="true">
     </el-table-column>
</el-table>

// 设置默认勾选
// 如果当页数据存在于selectedItemList,则勾选
// 注意:要按照接口顺序来,不能按照列表顺序来
setSelction(selectedItem,item){
    // 选中项id
    var selectedId = [];
    var _this = this;
    selectedItem.forEach(function(selectedItem){
        item.forEach(function(listItem){
            if(selectedItem.id == listItem.id){
                _this.$refs.itemTable.toggleRowSelection(listItem,true);
            }
        })
    })
},


handleSelectionChange: function(selection){
// 保留selectedItemList中 1、不存在于当页 2、不存在于selection的数据。其他的直接替换成selection。
   var _this = this;
   var keepItem = [];
   var preSelectedItem = this.selectedItemList;
   var preSelectedId = [];
   var selectionId = [];
   var itemId = [];
   selection.forEach(function(item){
       selectionId.push(item.id)
   })
   this.itemList.forEach(function(item){
       itemId.push(item.id)
   })
   preSelectedItem.forEach(function(item){
       preSelectedId.push(item.id)
   })
   // 若selection在右侧不存在,则添加(selection有,右侧没有;selection没有,右侧有)
   // 若已经存在,则不添加
   preSelectedItem.forEach(function(item){
       if(selectionId.indexOf(item.id) == -1){
           if(itemId.indexOf(item.id) == -1){
               keepItem.push(item)
           }
       }
   })
   _this.selectedItemList = keepItem.concat(selection);
},
`el-table` 是 Element UI 提供的一个用于展示表格数据的组件,它支持丰富的功能,包括多选功能。要实现勾选互斥选项(即一次只能选择一项或多项,但不能同选择多项),你可以利用 `row-key` 和 `selection-method` 属性来定制选择行为。 **1. row-key**:设置每一行的唯一标识,当使用多选,这个属性很重要,因为它是确定哪一行被选中的依据。如果你的表格数据中每个对象有一个独特的 ID,可以设置为 `row-key="id"`。 **2. selection-method**:这是一个自定义方法,用于控制如何根据用户的选择更新行的状态。你可以在这个方法中添加互斥逻辑,例如: ```javascript methods: { selectRow(row) { if (this.selectedRows.length > 0) { // 如果已选中其他项,取消当前项的选择 this.$refs.table.clearSelection(); this.selectedRows.forEach(row => row.isSelected = false); } // 添加新的选中项 row.isSelected = true; this.selectedRows.push(row); }, deselectRow(row) { // 如果当前项被选中,移除它 row.isSelected = false; const index = this.selectedRows.indexOf(row); if (index !== -1) { this.selectedRows.splice(index, 1); } }, } ``` **3. 在模板上绑定事件**: 在表格的每行单元格上绑定 `@click` 事件,调用对应的 `selectRow` 或 `deselectRow` 方法。 ```html <template> <el-table :data="tableData" ref="table" :row-key="rowKey" selection-method="selectRow" @select="handleSelect" @row-click="handleRowClick" > <!-- 表格列 --> </el-table> </template> ``` **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值