vue3 Table数据预勾选、翻页、勾选操作、全选等操作数据更新

表格视图代码

<el-table ref="multipleTableRef" :data="tabledata" border header-cell-class-name="table-header"
	highlight-current-row :row-key="getRowKeys" @select="handleSelect" @select-all="selectall">
	<el-table-column type="selection" width="55" :reserve-selection="true" />
	<el-table-column prop="id" label="ID" />
	<el-table-column prop="name" label="名称" />
	<el-table-column prop="age" label="年龄" />
	<el-table-column prop="city" label="城市" />
</el-table>

:row-key="getRowKeys" && :reserve-selection="true" // 翻页不置空选中需用到此方法和属性(行数据的 Key,用来优化 Table 的渲染; 在使用reserve-selection功能与显示树形数据时,该属性是必填的。)

@select="handleSelect" 当用户手动勾选数据行的 Checkbox 时触发的事件-勾选操作

@select-all="selectall" 当用户手动勾选全选 Checkbox 时触发的事件-全选(选中和取消)

数据定义

interface TableCommit {
id: number;
name: string; 
age: number; 
city: string; 
}
const multipleTableRef = ref<InstanceType<typeof ElTable>>()
// 列表数据
var tabledata = ref<TableCommit[]>([]); 
// 添加数据
var addform = reactive([]);

数据操作

// 翻页不置空选中需用到此方法
const getRowKeys = (row: any) => {
return row.id;
};
//请求数据预勾选数据
const handleCommitSearch = () => {
getTabledata(params).then((res: any) => {
tabledata.value = res.data;
 // 处理修改选择的数据勾选
	nextTick(() => {
		getTabledata.value.forEach((item) => {
			multipleTableRef.value!.toggleRowSelection(item, true);
	});
});
}

// 勾选
const handleSelect = (selection: any, row: any) => {
  //选中元素在数组里面代表选中--添加
if (selection.includes(row)) {
	addform.push(row);
} else {
	//选中元素不在数组里面代表取消选中--移除
	addform.splice(addform.indexOf(row), 1);
}
}
  
// 全选or全取消
const selectall = (rows: any) => {
if (rows.length == 0) {
	// 取消全选操作(如果用户已全选再取消,取消的数据不可得)需要借助请求展示在列表的数据
  // 借助列表的数据做移除操作
	tabledata.value.forEach((element: any) => {
		addform.splice(addform.indexOf(element.), 1);
	});
	} else {
	// 全选操作
	rows.forEach((element) => {
		addform..push(element.);
	});
   // 数据去重
	addform = Array.from(new Set(addform));
	}
}

如果对您有帮助,帮忙关注点赞分享,您的鼓励是我更新最大的动力!谢谢~~

Vue和Element UI的表格组件中,实现单击行勾选全选以及全取消的功能通常需要结合`element-ui`的`el-table`和自定义事件或者表单控件如`el-checkbox-group`来完成。以下是一个简化的步骤说明: 1. 首先,在模板中,将`<el-checkbox>`元素添加到每一行的单元格中,绑定一个数据属性来控制当前行的勾选状态。 ```html <el-table-column type="selection" width="55"> </el-table-column> <el-table-column prop="name" label="姓名"> <template slot-scope="scope">{{ scope.row.name }}</template> </el-table-column> <el-table-column prop="checked" label="选择"> <template slot-scope="scope"> <el-checkbox v-model="scope.$row.checked"></el-checkbox> </template> </el-table-column> ``` 2. 在`methods`里,定义一些处理勾选状态的方法。比如,当某一行被勾选时,可以更新对应的行数据;当全选/全取消按钮被点击时,遍历所有行设置它们的状态。 ```javascript data() { return { checkedAll: false, // 表格数据 tableData: [], }; }, methods: { toggleRow(row) { row.checked = !row.checked; // 如果你想同步其他状态或操作,这里处理 }, toggleAllSelection() { this.tableData.forEach(row => (row.checked = this.checkedAll)); }, onSelectionChange(rows) { this.checkedAll = rows.some(row => row.checked); }, } ``` 3. 在`el-table`上监听`selection-change`事件,以便于全局管理所有行的勾选状态。 ```html <el-table :data="tableData" @selection-change="onSelectionChange"> ... </el-table> ``` 通过以上设置,用户就可以在单击行时切换勾选状态,并通过全选/全取消按钮来批量操作整个表格。如果你有更复杂的需求,还可以考虑使用计算属性或者watch来跟踪并响应勾选状态的变化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刺-客

如果对您有点帮助,请给点支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值