赞
踩
问题:在项目中遇见,使用element表格加多选框,需要限制选择数量的情况
解决办法:max就是最多可以选择的条数
- <el-table
- ref="multipleTable"
- v-loading="loading"
- :data="tableData"
- @selection-change="handleSelectionChange"
- @current-change="handleCurrentChange"
- row-key="id"
- >
- <el-table-column
- :selectable="selectable"
- :reserve-selection="true"
- type="selection"
- align="center"
- />
- // 回调表格选择的数据 当选择项发生变化时会触发该事件
- handleSelectionChange(list) {
- if (list.length > this.max) {
- this.limitFn(list);
- return;
- }
- this.multiSelectedGroups = [...list];
- },
- // 限制数量方法
- limitFn(list) {
- this.$refs.multipleTable.clearSelection(); //用于多选表格,清空用户的选择
- for (let i = 0; i < this.max; i++) {
- this.$refs.multipleTable.toggleRowSelection(list[i]); //用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)
- }
- },
- // 判断复选框是否可以选择
- selectable(row) {
- let index = this.multiSelectedGroups.findIndex((v) => v.id === row.id);
- return this.multiSelectedGroups.length >= this.max
- ? index !== -1
- ? true
- : false
- : true;
- },
项目中这一块我是做的一个组件,调用的时候可能传入之前选中的数据,所以需要渲染之前选中的数据。hadSelected是调用组件时传入的默认选择的数据
- //用于多选表格 回显的数据 等DOM元素渲染完毕之后再处理回显
- if (this.hadSelected.length) {
- let idArr = this.hadSelected.map((val) => val.id);
- this.$nextTick((res) => {
- this.tableData.forEach((val) => {
- if (idArr.includes(val.id)) {
- this.$refs.multipleTable.toggleRowSelection(val, true);
- }
- });
- });
- }
需要注意一下,reserve-selection,仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key
)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。