当前位置: 首页 > article >正文

vue3中Element-plus table 反选 禁用实战

在 Vue 3 中使用 Element Plus 的 el-table 组件实现反选和禁用某些行的功能,可以通过以下步骤实现:

1. 安装 Element Plus

首先,确保你已经安装了 Element Plus:

npm install element-plus

2. 引入 Element Plus 组件

在你的 Vue 组件中引入 el-table 组件:

<template>
  <el-table
  	ref="multipleTableRef"
    :data="tableData"
    style="width: 100%"
    @selection-change="handleSelectionChange"
  >
    <el-table-column type="selection" width="55" :selectable="selectable"></el-table-column>
    <el-table-column prop="name" label="Name" width="180"></el-table-column>
    <el-table-column prop="age" label="Age" width="180"></el-table-column>
    <el-table-column prop="address" label="Address"></el-table-column>
  </el-table>
</template>

<script setup>
import { ref, onMounted } from 'vue'

const multipleTableRef = ref()
const selectedRows = ref([])
// 模拟需要选中的数据
const selectData = [
	{ id: 1, name: 'John', age: 25, address: 'New York', disabled: false },
]
// 表格的渲染数据
const tableData = ref([
  { id: 1, name: 'John', age: 25, address: 'New York', disabled: false },
  { id: 2, name: 'Jane', age: 22, address: 'London', disabled: true },
  { id: 3, name: 'Tom', age: 30, address: 'Sydney', disabled: false },
])

// 模拟请求数据
const getDataApi = async () => {
	const { code, data }= await axios.get()
	if (code === 200) {
		// 如果接口请求数据没有disabled属性,则根据 selectData 的数据进行加入属性,用于是否禁用
		data?.forEach(c => {
	      c.disabled= false // 先初始化所有 checked 为 false
	      selectData?.forEach(v => {
	        if (c.serviceId === v.serviceId) {
	          c.disabled= true
	        }
	      })
	    })
		tableData.value = data || []
	}
}

const handleSelectionChange = (selection) => {
  selectedRows.value = selection
}

// 禁用选中框
const selectable = (row) => {
  return !row.disabled; // 禁用 disabled 为 true 的行,如果该row没有disabled属性,则在数据拿到的时候根据你的需求情况加入disabled属性
}

// 默认反选数据
const defaultSelect = () => {
	// selectData数据为需要选中的数据
 for (let i = 0; i < selectData?.length; i++) {
   multipleTableRef.value?.toggleRowSelection(
     tableData.value?.find(item => {
       return selectData[i].id === item.id
     }) || {},
     true
   )
 }
}

onMounted(async () => {
	await getDataApi()
	await defaultSelect()
})

</script>

3. 代码解析

  • multipleTableRef: 表格ref实例,用于操控整个table组件,包括反选等等。
  • tableData: 表格的数据源,其中 disabled 字段用于控制某一行是否可以被选中。
  • selectedRows: 用于存储当前选中的行。
  • selectData: 模拟需要选中的数据。
  • getDataApi: 模拟api请求数数据。
  • handleSelectionChange: 当用户选择或取消选择某一行时触发,更新 selectedRows
  • selectable: 用于控制某一行是否可以被选中。如果 row.disabledtrue,则该行不可选中。
  • defaultSelect: 反选功能,遍历所有行,切换每一行的选中状态(跳过被禁用的行)。

4. 运行效果

  • 表格中 disabledtrue 的行将无法被选中。
  • 点击“反选”按钮时,所有可被选中的行将切换选中状态。

5. 注意事项

  • 反选功能只会切换可被选中的行的状态,禁用的行不会受到影响。
  • 你可以根据实际需求调整 selectable 函数的逻辑,以实现更复杂的禁用规则。
  • 还可以加入分页等操作,根据需求来实现。

通过以上步骤,你可以在 Vue 3 中使用 Element Plus 实现表格的反选和禁用功能。


http://www.kler.cn/a/573307.html

相关文章:

  • 【Elasticsearch】Elasticsearch 的`path.settings`是用于配置 Elasticsearch 数据和日志存储路径的重要设置
  • JVM常用概念之局部变量可达性
  • 大模型为何无法达到AGI?
  • 利用Python爬虫按图搜索1688商品(拍立淘)
  • 【linux 安装mongodb】在redhat9上安装mongodb8出现下载元数据错误
  • 【大模型安全】大模型的技术风险
  • NModbus 连接到Modbus服务器(Modbus TCP)
  • NFC 碰一碰发视频系统技术开发实战:从硬件触发到智能生成的全流程实现
  • B站pwn教程笔记-4
  • Java Web-Filter
  • 面试基础---MySQL 事务隔离级别与 MVCC 深度解析
  • IP地址怎么加密https访问?
  • JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的田间杂草检测识别系统(python+卷积神经网络)
  • Stable Diffusion LoRA 技术详解
  • debian/control 文件中的${misc:Depends}
  • 如何在React中正确处理异步操作?
  • windows 利用nvm 管理node.js 2025最新版
  • 靶场之路-VulnHub-DC-6 nmap提权、kali爆破、shell反连
  • DAViMNet:基于状态空间模型的域自适应目标检测