Element-Plus表格實現Table自定義合并行數據
在開發(fā)項目中,我們時常會用到表格,許多需求可能會要求自定義特定的行或列。
接下來,我們將探討在實際開發(fā)中如何應對這一挑戰(zhàn)。
本文案例采用的技術:
名稱 | 版本 |
---|---|
Vue3 | ^3.5.12 |
element-plus | ^2.8.8 |
知識點
我們先來復習下2個知識點,來自element-plus文檔 table:
1、自定義表頭
通過設置 slot 來自定義表頭。(只貼出重點代碼)
<el-table :data="filterTableData" style="width: 100%"> <el-table-column label="Date" prop="date" /> <el-table-column label="Name" prop="name" /> <el-table-column align="right"> <template #header> <el-input v-model="search" size="small" placeholder="Type to search" /> </template> <template #default="scope"> <el-button size="small" @click="handleEdit(scope.$index, scope.row)"> Edit </el-button> <el-button size="small" type="danger" @click="handleDelete(scope.$index, scope.row)" > Delete </el-button> </template> </el-table-column> </el-table>
其中可以看出,通過 <template #header> 自定義表頭,<template #default="scope"> 自定義內容。
2、合并行或列
多行或多列共用一個數據時,可以合并行或列。
通過給 table 傳入span-method方法可以實現合并行或列, 方法的參數是一個對象,里面包含當前行 row、當前列 column、當前行號 rowIndex、當前列號 columnIndex 四個屬性。 該函數可以返回一個包含兩個元素的數組,第一個元素代表 rowspan,第二個元素代表 colspan。 也可以返回一個鍵名為 rowspan 和 colspan 的對象。
<el-table :data="tableData" :span-method="arraySpanMethod" border style="width: 100%" > <el-table-column prop="id" label="ID" width="180" /> <el-table-column prop="name" label="Name" /> <el-table-column prop="amount1" sortable label="Amount 1" /> <el-table-column prop="amount2" sortable label="Amount 2" /> <el-table-column prop="amount3" sortable label="Amount 3" /> </el-table> <script lang="ts" setup> // 省略其他代碼... const arraySpanMethod = ({ row, column, rowIndex, columnIndex, }: SpanMethodProps) => { if (rowIndex % 2 === 0) { if (columnIndex === 0) { return [1, 2] } else if (columnIndex === 1) { return [0, 0] } } } </script>
實戰(zhàn)開發(fā)
假設一個需求:在最后一行新增一條自定義的行數據。
結合上述2個知識點,我們可以進行改進:
<template> <el-table :data="tableData" :span-method="arraySpanMethod" border style="width: 500px"> <el-table-column prop="id" label="ID" width="100"> <template #default="scope"> <span v-if="scope.$index === tableData.length - 1"> <span>是否確認信息:</span> <el-radio-group v-model="scope.row.confirmFlag"> <el-radio :value="true">確認</el-radio> <el-radio :value="false">未確認</el-radio> </el-radio-group> </span> <template v-else>{{ scope.row.id }}</template> </template> </el-table-column> <el-table-column prop="name" label="姓名" /> <el-table-column prop="age" label="年齡" /> </el-table> </template> <script setup lang="ts"> import type { TableColumnCtx } from 'element-plus' interface User { id?: string name?: string age?: number confirmFlag?: boolean } interface SpanMethodProps { row: User column: TableColumnCtx<User> rowIndex: number columnIndex: number } const arraySpanMethod = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => { // 最后一行 if (rowIndex === tableData.length - 1) { // [1,3] 占一行三列 return [1, 3] } } const tableData: User[] = [ { id: '1', name: 'Tom1', age: 20, }, { id: '2', name: 'Tom2', age: 30, }, { id: '3', name: 'Tom3', age: 40, }, // 新增一條自定義的數據 { confirmFlag: true, }, ] </script> <style scoped></style>
到此這篇關于Element-Plus表格實現Table自定義合并行數據的文章就介紹到這了,更多相關Element-Plus自定義合并行數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue3如何解決各場景l(fā)oading過度(避免白屏尷尬!)
在開發(fā)的過程中點擊提交按鈕,或者是一些其它場景總會遇到loading加載,下面這篇文章主要給大家介紹了關于vue3如何解決各場景l(fā)oading過度的相關資料,避免白屏尷尬,需要的朋友可以參考下2023-03-03vue emit之Property or method “$$v“ i
這篇文章主要介紹了vue emit之Property or method “$$v“ is not defined的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06