Element Plus el-table 默认勾选行的方法

方法一:使用 row-keyreserve-selection

javascript 复制代码
<template>
  <el-table
    ref="multipleTableRef"
    :data="tableData"
    style="width: 100%"
    @selection-change="handleSelectionChange"
    row-key="id"  <!-- 必须指定row-key -->
  >
    <el-table-column type="selection" width="55" :reserve-selection="true" />
    <el-table-column prop="date" label="Date" width="180" />
    <el-table-column prop="name" label="Name" width="180" />
    <el-table-column prop="address" label="Address" />
  </el-table>
</template>

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

const multipleTableRef = ref()
const tableData = ref([
  {
    id: 1,
    date: '2016-05-03',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 2,
    date: '2016-05-02',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id: 3,
    date: '2016-05-04',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  }
])

// 默认选中的行ID
const defaultSelectedIds = [1, 3]

onMounted(() => {
  // 遍历表格数据,找到需要默认选中的行
  tableData.value.forEach(row => {
    if (defaultSelectedIds.includes(row.id)) {
      // 使用toggleRowSelection方法选中行
      multipleTableRef.value.toggleRowSelection(row, true)
    }
  })
})

const handleSelectionChange = (val) => {
  console.log('当前选中:', val)
}
</script>

方法二:使用 selectselect-all事件

javascript 复制代码
<template>
  <el-table
    ref="multipleTableRef"
    :data="tableData"
    style="width: 100%"
    @select="handleSelect"
    @select-all="handleSelectAll"
    row-key="id"
  >
    <el-table-column type="selection" width="55" />
    <!-- 其他列 -->
  </el-table>
</template>

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

const multipleTableRef = ref()
const tableData = ref([...]) // 同上

onMounted(() => {
  // 默认选中ID为1和3的行
  const rowsToSelect = tableData.value.filter(row => [1, 3].includes(row.id))
  rowsToSelect.forEach(row => {
    multipleTableRef.value.toggleRowSelection(row, true)
  })
})

const handleSelect = (selection, row) => {
  console.log('选中变化:', selection)
}

const handleSelectAll = (selection) => {
  console.log('全选变化:', selection)
}
</script>

方法三:使用 v-model 绑定选中数据

javascript 复制代码
<template>
  <el-table
    :data="tableData"
    style="width: 100%"
    row-key="id"
    @selection-change="handleSelectionChange"
  >
    <el-table-column
      type="selection"
      width="55"
      v-model="selectedRows"
      :reserve-selection="true"
    />
    <!-- 其他列 -->
  </el-table>
</template>

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

const tableData = ref([...]) // 同上
const selectedRows = ref([])

// 设置默认选中的行
onMounted(() => {
  selectedRows.value = tableData.value.filter(row => [1, 3].includes(row.id))
})

const handleSelectionChange = (val) => {
  console.log('选中变化:', val)
}
</script>

方法四:分页表格保留选中状态

javascript 复制代码
<template>
  <el-table
    ref="multipleTableRef"
    :data="currentPageData"
    style="width: 100%"
    row-key="id"
    @selection-change="handleSelectionChange"
  >
    <el-table-column type="selection" width="55" :reserve-selection="true" />
    <!-- 其他列 -->
  </el-table>
  <el-pagination
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-size="pageSize"
    :total="total"
  />
</template>

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

const multipleTableRef = ref()
const tableData = ref([...]) // 所有数据
const currentPage = ref(1)
const pageSize = ref(10)
const selectedRows = ref([])

const total = computed(() => tableData.value.length)
const currentPageData = computed(() => {
  const start = (currentPage.value - 1) * pageSize.value
  const end = start + pageSize.value
  return tableData.value.slice(start, end)
})

// 默认选中某些行
onMounted(() => {
  const defaultSelectedIds = [1, 3, 5]
  selectedRows.value = tableData.value.filter(row => defaultSelectedIds.includes(row.id))
})

const handleCurrentChange = (page) => {
  currentPage.value = page
}

const handleSelectionChange = (val) => {
  selectedRows.value = val
}
</script>
相关推荐
梦帮科技5 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
爱勇宝6 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员
微信开发api-视频号协议7 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
甲维斯7 小时前
Fable5:20美金的顶级设计师!
前端·人工智能
kyriewen7 小时前
我同时用了 Claude Code、Cursor 和 Codex,说说三个工具的真实差距——2026 年选错工具比不用 AI 更浪费时间
前端·ai编程·claude
Jackson__7 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源
闲猫7 小时前
Python FastAPI + SQLAlchemy 入门教程:从零搭建你的第一个 Web 应用
前端·python·fastapi
林小帅8 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端
IT_陈寒8 小时前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
简简单单就是我_hehe8 小时前
前端埋点日志解决方案:完整 User-Agent 解析工具实现,爬虫识别、设备品牌、操作系统、浏览器版本全解析(附完整源码)
前端·爬虫