vue3 el-table 行筛选 设置为单选

在 Vue 3 中,使用 Element Plus 的 <el-table> 组件时,如果你想实现行筛选功能,并且要求这种筛选为单选(即每次只能选择一行),你可以通过结合使用 selection 模式和一些额外的逻辑来实现。

1. 设置表格为单选模式

首先,确保你的 <el-table> 组件设置了 @selection-change 事件监听器,并开启了行选择(selection)模式。

<template>
  <el-table
    :data="tableData"
    @selection-change="handleSelectionChange"
    ref="multipleTableRef"
    @row-click="handleRowClick"
    style="width: 100%">
    <el-table-column
      type="selection"
      width="55">
    </el-table-column>
    <el-table-column
      label="日期"
      width="120">
      <template #default="scope">{{ scope.row.date }}</template>
    </el-table-column>
    <el-table-column
      label="姓名"
      width="120">
      <template #default="scope">{{ scope.row.name }}</template>
    </el-table-column>
    <!-- 其他列 -->
  </el-table>
</template>

2. 实现单选逻辑

在 <el-table> 的 @selection-change 事件中,你可以控制最多只能选择一个选项。同时,你也可以通过 @row-click 事件直接设置单选效果。

<script setup>
import { ref } from 'vue';
import { ElTable } from 'element-plus';
 
const tableData = ref([/* 数据列表 */]);
const selectedRow = ref(null); // 用于存储当前选中的行数据
const multipleTableRef = ref(null); // 引用表格,用于调用 clearSelection 方法
 
// 处理行选择变化
const handleSelectionChange = (selection) => {
  if (selection.length > 1) {
    // 如果尝试选择多行,则取消之前的所有选择,只保留当前选中的行
    multipleTableRef.value.clearSelection(); // 清除所有选择
    if (selection[0]) { // 只保留第一项的选择状态,实现单选效果
      multipleTableRef.value.toggleRowSelection(selection[0], true); // 重新选择第一项
      selectedRow.value = selection[0]; // 更新选中行数据
    } else {
      selectedRow.value = null; // 如果没有选中任何行,则清空选中行数据
    }
  } else {
    selectedRow.value = selection[0]; // 更新选中行数据
  }
};
 
// 处理行点击事件,实现单选效果(可选)
const handleRowClick = (row, column, event) => {
  if (selectedRow.value !== row) { // 如果点击的行不是当前选中的行,则更新选中行数据和选择状态
    multipleTableRef.value.clearSelection(); // 清除所有选择
    multipleTableRef.value.toggleRowSelection(row, true); // 选择当前行
    selectedRow.value = row; // 更新选中行数据
  } else { // 如果点击的行就是当前选中的行,则不作处理(保持选中状态)或者可以选择取消选中(根据需求)
    multipleTableRef.value.clearSelection(); // 可选:取消选中状态,实现点击已选行不取消选择的效果(注释此行以保持点击已选行不取消选择)
  }
};
</script>

3. 使用 selectedRow 控制显示或逻辑处理

你可以根据 selectedRow 的值来控制某些逻辑或显示特定的UI元素。例如,你可以在表格下方显示当前选中行的详细信息:

<template>
  <div v-if="selectedRow">选中行的详细信息:{{ selectedRow }}</div>
</template>

通过这种方式,你可以实现在 Vue 3 和 Element Plus 中使用 <el-table> 的单选行筛选功能。

### 如何在 Vue3 中使用 Element Plus 的 `el-table` 组件实现单选功能 为了实现在 Vue3Element Plus 中通过 `el-table` 组件提供单选功能,可以通过监听表格的择事件并控制其为来完成。以下是具体实现方式: #### 数据绑定与逻辑处理 首先,在组件的数据模型中定义一个变量用于存储当前被中的数据。当用户点击某一时,更新该变量,并清除其他已有的择状态。 ```javascript <script setup> import { ref } from &#39;vue&#39;; const selectedRow = ref(null); // 当前中的 const tableData = [ { id: 1, name: &#39;Alice&#39;, age: 24 }, { id: 2, name: &#39;Bob&#39;, age: 30 }, { id: 3, name: &#39;Charlie&#39;, age: 28 } ]; function handleSelectionChange(row) { if (selectedRow.value && row.id === selectedRow.value.id) { selectedRow.value = null; // 如果再次点击同一,则取消中 } else { selectedRow.value = row; } clearOtherRows(); // 清除其他中状态 } function clearOtherRows() { const rows = Array.from(document.querySelectorAll(&#39;.single-select-row&#39;)); rows.forEach((row) => { row.classList.remove(&#39;active&#39;); }); if (selectedRow.value) { document.querySelector(`[data-id="${selectedRow.value.id}"]`).classList.add(&#39;active&#39;); } } </script> ``` #### 自定义样式与模板结构 通过设置 CSS 类名以及 HTML 属性的方式,可以轻松调整 UI 样式以适应需求。例如,将默认复框替换为圆形图标或其他视觉效果。 ```html <template> <div> <el-table :data="tableData" @row-click="handleSelectionChange"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <!-- 添加额外列显示中状态 --> <el-table-column width="50px"> <template #default="{ row }"> <span v-if="isSelected(row)" class="circle-selected">●</span> <!-- 圆形表示 --> <span v-else></span> </template> </el-table-column> </el-table> </div> </template> <style scoped> .circle-selected { color: green; font-size: 16px; } .single-select-row.active { background-color: lightblue !important; } </style> ``` 上述代码片段实现了以下几点[^1]: - 使用 `@row-click` 方法捕获用户的点击操作。 - 动态判断哪一处于激活状态并通过条件渲染展示对应的标记(如绿色圆点)。 - 提供了一个简单的机制允许开发者进一步扩展交互逻辑或者美化界面设计。 #### 注意事项 需要注意的是,如果存在分页或级嵌套场景下应用此方案可能需要额外考虑全局唯一标识符管理等问题以便准确追踪每一条记录的状态变化情况。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海天胜景

您的鼓励是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值