6.4 Element UI 中的 <el-table> 表格組件

一、 核心組成與基本結構

Element UI 的表格主要由以下幾個核心部分構成:

  1. <el-table>: 表格的根容器,負責管理數據、選擇、排序、分頁集成等全局狀態。
  2. <el-table-column>: 定義表格的一列。表格的列結構由一個或多個?<el-table-column>?組件定義。
  3. data: 傳遞給?<el-table>?的?data?屬性,是一個數組,數組中的每個對象代表表格中的一行數據。
  4. prop:?<el-table-column>?的?prop?屬性,指定該列顯示?data?數組中每個對象的哪個屬性的值。
  5. label:?<el-table-column>?的?label?屬性,定義該列的標題

最基礎的示例:

<template><el-table :data="tableData" style="width: 100%"><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table>
</template><script>
export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}]}}
}
</script>

二、?<el-table>?詳解 (根容器)

管理表格的整體行為和外觀。

  • 關鍵屬性:
    • data:?必填。綁定表格的數據源數組。
    • height?/?max-height: 設置表格的高度。設置?height?時,表格會固定高度,超出部分出現縱向滾動條。設置?max-height?時,表格高度隨內容變化,但不超過最大值。
    • stripe: 是否顯示斑馬紋(隔行變色)。
    • border: 是否顯示縱向邊框。
    • fit: 列的寬度是否自撐開。true?時,列寬會根據內容自動調整(可能不精確)。
    • show-header: 是否顯示表頭。
    • highlight-current-row: 是否要高亮當前鼠標懸停的行。
    • current-row-key: 高亮某一行的?key,需要設置?row-key
    • row-key: 為數據行指定?key在使用?reserve-selection,?expand,?tree?等功能時非常重要,推薦始終設置。通常指向數據中唯一的字段(如?id)。
    • empty-text: 數據為空時顯示的文本。
    • default-expand-all: 默認是否展開所有行(用于樹形數據或展開行)。
    • tooltip-effect:?hover?時?el-tooltip?的效果。dark?/?light
    • row-style: 行的 CSS 樣式,可以是對象或返回對象的函數。
    • cell-style: 單元格的 CSS 樣式,可以是對象或返回對象的函數。
    • header-row-style?/?header-cell-style: 表頭行/單元格的樣式。
    • row-class-name?/?cell-class-name: 為行/單元格添加自定義 class,可以是字符串或返回字符串的函數。
  • 關鍵事件:
    • @select: 當用戶手動勾選數據行的 Checkbox 時觸發。
    • @select-all: 當用戶手動勾選全選 Checkbox 時觸發。
    • @selection-change: 當選擇項發生變化時觸發。
    • @cell-mouse-enter?/?@cell-mouse-leave: 單元格 hover 事件。
    • @cell-click?/?@cell-dblclick: 單元格點擊/雙擊事件。
    • @row-click?/?@row-dblclick: 行點擊/雙擊事件。
    • @row-contextmenu: 行右鍵菜單事件。
    • @header-click?/?@header-contextmenu: 表頭點擊/右鍵菜單事件。
    • @sort-change: 當表格的排序條件發生變化時觸發。
    • @filter-change: 當表格的篩選條件發生變化時觸發。
    • @current-change: 當高亮行發生變化時觸發。
    • @expand-change: 當行展開狀態發生變化時觸發。

三、?<el-table-column>?詳解 (列定義)

定義表格的每一列,是表格功能的核心。

  • 關鍵屬性:
    • type: 定義列的類型。這是最重要的屬性之一。
      • selection: 渲染一個?Checkbox,用于多選。通常放在第一列。
      • index: 渲染一個索引列,顯示行的序號(從 1 開始)。
      • expand: 渲染一個可展開的按鈕(+/-),用于展開行顯示額外內容。
    • prop: 指定該列顯示數據對象中的哪個屬性的值。例如?prop="name"?會顯示?row.name
    • label: 該列的標題
    • width: 設置該列的寬度(像素值,如?180)。
    • min-width: 設置該列的最小寬度。當?fit=true?時,列寬會自適應,但不會小于?min-width
    • fixed: 列是否固定。true?/?left?/?right。固定列在表格橫向滾動時會固定在左側或右側。
    • sortable: 該列是否可排序。true?/?customcustom?時需要監聽?@sort-change?事件自行處理排序邏輯(常用于服務端排序)。
    • sort-method: 自定義排序方法的函數。
    • sort-by: 數組或字符串,指定排序時依據的屬性或計算函數。
    • resizable: 對應列是否可以通過拖動改變寬度。true?/?false
    • column-key: 給列設置一個 key,用于?@filter-change?事件的回調參數。
    • align: 列內容的對齊方式。left?/?center?/?right
    • header-align: 表頭的對齊方式。left?/?center?/?right。若不設置,則繼承?align?的值。
    • show-overflow-tooltip: 當內容過長被隱藏時是否顯示 tooltip。
    • formatter: 用來格式化顯示文本的函數。function(row, column, cellValue, index)
    • filters: 數據過濾的選項。數組格式,如?[{ text: '2016-05-01', value: '2016-05-01' }]
    • filter-placement: 過濾彈出框的定位。top-start?/?top-end?/?bottom-start?等。
    • filter-multiple: 數據過濾的選項是否多選。
    • filter-method: 數據過濾使用的方法。function(value, row, column),返回?true?表示顯示,false?表示隱藏。
    • filtered-value: 設置的篩選條件,需要配合?filter-method?使用。
  • 插槽 (Slots):
    • 默認插槽:?用于自定義列的內容。這是實現復雜列(如操作按鈕、狀態標簽、自定義組件)的最主要方式。插槽作用域 (slot-scope) 提供了?row?(當前行數據),?column?(當前列對象),?$index?(行索引)。
    • header: 用于自定義表頭的內容。

四、 常用功能詳解

1. 多選 (Selection)
<el-table:data="tableData"@selection-change="handleSelectionChange"ref="multipleTable"
><!-- selection 列 --><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><!-- ... -->
</el-table><script>
export default {methods: {handleSelectionChange(val) {this.multipleSelection = val; // val 是選中行的數據對象數組},toggleSelection(rows) {// 手動切換某行的選中狀態if (rows) {rows.forEach(row => {this.$refs.multipleTable.toggleRowSelection(row);});} else {this.$refs.multipleTable.clearSelection();}}}
}
</script>
2. 排序 (Sorting)
<!-- 簡單前端排序 -->
<el-table-column prop="date" label="日期" sortable width="180"></el-table-column><!-- 自定義排序 (服務端排序) -->
<el-table-columnprop="name"label="姓名"sortable="custom"@sort-change="handleSortChange"
></el-table-column><script>
export default {methods: {handleSortChange({ column, prop, order }) {// 根據 prop 和 order ('ascending', 'descending', null) 請求服務端數據console.log(`排序字段: ${prop}, 順序: ${order}`);// fetchSortedData(prop, order);}}
}
</script>
3. 篩選 (Filtering)
<el-table-columnprop="tag"label="標簽":filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]":filter-method="filterTag"filter-placement="bottom-end"
><template slot-scope="scope"><!-- 使用 el-tag 展示標簽 --><el-tag :type="scope.row.tag === '家' ? 'primary' : 'success'" closeable>{{ scope.row.tag }}</el-tag></template>
</el-table-column><script>
export default {methods: {filterTag(value, row) {return row.tag === value;}}
}
</script>
4. 自定義列內容 (使用插槽)

這是最強大的功能,可以實現幾乎任何復雜的單元格內容。

<el-table-column label="操作" width="180" fixed="right"><template slot-scope="scope"><el-button @click="handleEdit(scope.$index, scope.row)" size="mini">編輯</el-button><el-button @click="handleDelete(scope.$index, scope.row)" size="mini" type="danger">刪除</el-button><!-- 條件渲染 --><el-button v-if="scope.row.status === 0" size="mini" @click="handleEnable(scope.row)">啟用</el-button><el-button v-else size="mini" @click="handleDisable(scope.row)">禁用</el-button><!-- 使用 switch --><el-switchv-model="scope.row.enabled"active-color="#13ce66"inactive-color="#ff4949"@change="handleSwitchChange(scope.row)"></el-switch></template>
</el-table-column>
5. 展開行 (Expand)
<el-table:data="tableData"style="width: 100%":row-key="getRowKey" <!-- 重要:用于展開行 -->
><!-- expand 列 --><el-table-column type="expand" width="50"><template slot-scope="props"><p>詳細信息: {{ props.row.detail }}</p><p>描述: {{ props.row.description }}</p><!-- 可以嵌套另一個表格 --><!-- <el-table :data="props.row.subData">...</el-table> --></template></el-table-column><el-table-column label="姓名" prop="name"></el-table-column><!-- ... -->
</el-table><script>
export default {methods: {getRowKey(row) {return row.id; // 返回唯一標識}}
}
</script>
6. 樹形數據與懶加載
<el-table:data="tableData"style="width: 100%;margin-bottom: 20px;"row-key="id"borderdefault-expand-all:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
><el-table-column prop="name" label="名稱" sortable></el-table-column><el-table-column prop="date" label="日期" sortable></el-table-column><el-table-column prop="address" label="地址"></el-table-column>
</el-table><!-- 懶加載 -->
<el-table:data="tableData"style="width: 100%"row-key="id"border:tree-props="{children: 'children', hasChildren: 'hasChildren'}":load="load"
><!-- ... -->
</el-table><script>
export default {methods: {load(tree, treeNode, resolve) {// 模擬異步加載setTimeout(() => {resolve([{ id: 31, name: '葉子', date: '2016-05-01', address: '上海市' },{ id: 32, name: '葉子2', date: '2016-05-01', address: '上海市' }]);}, 1000);}}
}
</script>
7. 跨行/跨列合并 (Span Method)
<el-table:data="tableData":span-method="arraySpanMethod"borderstyle="width: 100%"
><!-- ... -->
</el-table><script>
export default {methods: {arraySpanMethod({ row, column, rowIndex, columnIndex }) {// 合并第一列(姓名)中相同值的行if (columnIndex === 0) {if (rowIndex % 2 === 0) {return {rowspan: 2, // 跨兩行colspan: 1  // 跨一列};} else {return {rowspan: 0, // 不顯示colspan: 0};}}}}
}
</script>

五、 高級技巧與最佳實踐

  1. 性能優化:
    • row-key:?必須設置,尤其在數據量大或使用?reserve-selection,?expand?時,能極大提升性能。
    • height?/?max-height: 設置固定高度,避免表格過長導致頁面卡頓。
    • 虛擬滾動: Element UI 原生不支持,但社區有第三方庫(如?vue-virtual-scroll-list)可以集成實現超大數據量的流暢滾動。
  2. 分頁集成:?通常?<el-table>?與?<el-pagination>?組件配合使用。<el-table>?顯示當前頁數據,<el-pagination>?控制頁碼,通過監聽分頁變化請求新數據。
  3. 自定義樣式:?使用?row-style,?cell-style,?row-class-name,?cell-class-name?或 CSS 覆蓋(注意類名)來自定義表格樣式。
  4. 空狀態:?使用?empty-text?或?slot="empty"?插槽自定義空數據時的展示內容(如圖片、提示語)。
  5. 可訪問性:?確保表頭清晰,使用?aria-*?屬性(如果框架支持)。
  6. 響應式:?表格在小屏幕上可能需要橫向滾動。考慮使用?min-width?和?max-width?控制列寬,或在移動端使用其他布局(如卡片列表)。

總結

Element UI 的 <el-table> 組件功能極其豐富,從基礎的數據展示到復雜的多選、排序、篩選、展開、樹形結構、合并單元格等,幾乎涵蓋了后臺管理系統的所有表格需求。掌握 <el-table-column>type, prop, label, slot 以及 <el-table>data, row-key 是使用它的基礎。靈活運用插槽 (slot-scope) 是實現復雜交互和自定義內容的關鍵。結合分頁組件,可以構建出功能強大、用戶體驗良好的數據表格界面。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94272.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 軟件編程(十一)網絡編程:TCP 機制與 HTTP 協議

五、TCP 進階機制&#xff08;一&#xff09;TCP 頭部標志位TCP 頭部的標志位是控制通信行為的 “開關”&#xff0c;常用標志位功能&#xff1a;標志位含義典型場景SYN請求建立連接三次握手第一步&#xff0c;發起連接請求ACK響應報文確認回復對方&#xff0c;確認已收到數據P…

[element-plus] el-table在行單擊時獲取行的index

el-table中添加 row-class-name&#xff0c;綁定row-click事件 <el-table:data"list":row-class-name"tableRowClassName"row-click"handleRowClick" > </el-table>給el-table中的每個row對象里添加index屬性 tableRowClassName({…

真實應急響應案例記錄

成功溯源的應急背景事件背景&#xff1a;服務器被植入博彩黑鏈入侵排查查看日志&#xff1a;發現Struts2漏洞利用痕跡通過process monitor工具監控Web進程(java.exe),發現執行了以下命令:攻擊入侵者服務器查看Web日志,可發現攻擊者的的Ip地址61.139.77.xx (四川省成都市 61.139…

RAG學習(五)——查詢構建、Text2SQL、查詢重構與分發

檢索優化&#xff08;二&#xff09; 一、查詢構建 在前面的章節中&#xff0c;我們探討了如何通過向量嵌入和相似度搜索來從非結構化數據中檢索信息。然而&#xff0c;在實際應用中&#xff0c;我們常常需要處理更加復雜和多樣化的數據&#xff0c;包括結構化數據&#xff0…

【typenum】 28 數組長度和二進制數的位數(Len)

一、源碼 這段代碼實現了一個類型級別的長度計算系統&#xff0c;用于在編譯時計算數組長度和二進制數的位數。 定義&#xff08;type_operators.rs&#xff09; /// A **type operator** that gives the length of an Array or the number of bits in a UInt. #[allow(clippy:…

【Docker項目實戰】使用Docker部署Hibiscus.txt簡單日記工具

【Docker項目實戰】使用Docker部署Hibiscus.txt簡單日記工具一、Hibiscus介紹1.1 Hibiscus簡介1.2 主要特點二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、拉取鏡像五、部署Hibis…

openharmony之啟動恢復子系統詳解

OpenHarmony的啟動恢復子系統負責整個系統的啟動流程&#xff0c;其中init進程是整個系統啟動的第一個用戶態進程&#xff08;PID1&#xff09;&#xff0c;承擔著系統初始化的核心職責 &#x1f3af; 目錄結構 &#x1f4cb; 理論基礎&#x1f50d; 源碼結構分析?? 配置體系…

Jenkins + SonarQube 從原理到實戰四:Jenkins 與 Gerrit 集成并實現自動任務

前言 前面我們已經部署了 SonarQube&#xff0c;并加入了 sonar-cxx 插件&#xff0c;實現了 C/C 代碼掃描&#xff0c;同時打通了 Windows AD 域&#xff0c;實現了 AD 用戶登錄與權限管控。 原計劃本篇&#xff08;第四篇&#xff09;完成 Jenkins Gerrit Sonar 的 CI 部分…

基于Spring Boot與Redis的電商場景面試問答解析

基于Spring Boot與Redis的電商場景面試問答解析 第一輪&#xff1a;基礎問題 面試官&#xff1a; 你好小C&#xff0c;今天我們以電商場景為背景進行技術面試。第一個問題&#xff0c;解釋一下Spring Boot的核心優勢是什么&#xff1f; 小C&#xff1a; Spring Boot就是開箱即用…

CUDA安裝,pytorch庫安裝

一、CUDA安裝 1.查看自己電腦適配的CUDA的最高版本 在命令提示符里輸入nvidia-smi表格右上角顯示的CUDA版本是該電腦適配的最高版本一般下載比該版本低一點的版本&#xff0c;因為會更穩定 由于本機沒有GPU所以會出現這個報錯&#xff0c;如果有GPU會出現如下報告&#xff1a…

力扣 第 463 場周賽

1. 按策略買賣股票的最佳時機 給你兩個整數數組 prices 和 strategy&#xff0c;其中&#xff1a; prices[i] 表示第 i 天某股票的價格。 strategy[i] 表示第 i 天的交易策略&#xff0c;其中&#xff1a; -1 表示買入一單位股票。 0 表示持有股票。 1 表示賣出一單位股票。 同…

Matplotlib 可視化大師系列(六):plt.imshow() - 繪制矩陣與圖像的強大工具

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;六&#xff09;&#xff1a;plt.imshow() - 繪制矩陣與圖像的強大工具一、 plt.imshow() 是什么&#xff1f;何時使用&#xff1f;二、 函數原型與核心參數三、 從入門到精通&#xff1a;代碼示例示…

小游戲AssetBundle加密方案解析

據游戲工委數據統計&#xff0c;2025年1-6月&#xff0c;國內小程序游戲市場實際銷售收入232.76億元&#xff0c;同比增長40.2%。其中內購產生收入153.03億元&#xff0c;占比65.7%&#xff0c;呈逐年提升趨勢。爆款頻出的小游戲&#xff0c;已經成為當下游戲行業的重要增長點。…

linux編程----網絡通信(TCP)

1.TCP特點1.面向數據流&#xff1b;2.有連接通信&#xff1b;3.安全可靠的通信方式&#xff1b;4.機制復雜&#xff0c;網絡資源開銷大&#xff1b;5.本質只能實現一對一的通信&#xff08;可使用TCP的并發方式實現一對多通信&#xff09;&#xff1b;2.TCP的三次握手與四次揮手…

HTTP請求的執行流程

HTTP請求的執行流程是一個系統化的過程&#xff0c;涉及多個網絡協議和交互步驟。以下是完整的流程分解&#xff0c;結合關鍵技術和邏輯順序&#xff1a;&#x1f310; 一、連接準備階段??URL解析與初始化??客戶端&#xff08;瀏覽器/應用&#xff09;解析目標URL&#xff…

聯想win11筆記本音頻失效,顯示差號(x)

該博客可以解答 常見問題詳情 Win10系統安裝更新后右下角聲音出現紅叉&#xff0c;電腦也沒有聲音&#xff0c; 通過設備管理器查看“系統設備”發現“音頻部分“出現黃色感嘆號&#xff0c; 更新驅動、卸載驅動與第三方工具檢測安裝后重啟都不行。 故障原因 應該是用戶曾經…

elasticsearch 7.x elasticsearch 使用scroll滾動查詢中超時問題案例

一 問題 1.1 問題描述 2025-08-21 16:57:53.646 | WARN ||||||||||||| scheduling-1 | ElasticsearchRestTemplate | Could not clear scroll: Unable to parse response body; nested exception is ElasticsearchStatusException [Unable to parse response body]; nested: …

高并發內存池(1)-定長內存池

高并發內存池&#xff08;1&#xff09;-定長內存池 可以采用兩種方式&#xff1a; 方式1&#xff1a; template <size_t N>方式2&#xff1a; template <class T>獲取到T對象大小的內存池&#xff0c;更推薦使用方式二&#xff0c;因為可以動態靈活調整類型 需要的…

第三階段sql server數據-4:數據庫腳本生成,備份與還原,分離與附加操作的圖文步驟

1_生成數據庫腳本&#xff08;1&#xff09;在數據庫上右鍵選擇任務&#xff08;2&#xff09;選擇生成腳本&#xff08;3&#xff09;選擇下一步&#xff0c;如果下次不想顯示此頁面&#xff0c;可勾選不再顯示此頁&#xff08;4&#xff09;如果導出全部數據&#xff0c;選擇…

【C++闖關筆記】STL:string的學習和使用(萬字精講)

?系列文章目錄 第零篇&#xff1a;從C到C入門&#xff1a;C有而C語言沒有的基礎知識總結-CSDN博客 第一篇&#xff1a;【C闖關筆記】封裝①&#xff1a;類與對象-CSDN博客 第二篇&#xff1a;【C闖關筆記】封裝②&#xff1a;友元與模板-CSDN博客 第三篇&#xff1a;【C闖…