日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

022_Table表格

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 022_Table表格 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Table表格例子

1.1. Table表格用于展示多條結構類似的數據, 可對數據進行排序、篩選、對比或其他自定義操作。

1.2. Table Attributes

參數

說明

類型

可選值

默認值

data

顯示的數據

array

height

Table的高度, 默認為自動高度。如果height為number類型, 單位px; 如果height為string類型, 則這個高度會設置為Table的style.height的值, Table的高度會受控于外部樣式。

string/number

max-height

Table的最大高度。合法的值為數字或者單位為px的高度。

string/number

stripe

是否為斑馬紋table

boolean

false

border

是否帶有縱向邊框

boolean

false

size

Table的尺寸

string

medium / small / mini

fit

列的寬度是否自撐開

boolean

true

show-header

是否顯示表頭

boolean

false

highlight-current-row

是否要高亮當前行

boolean

false

current-row-key

當前行的key, 只寫屬性

String,Number

row-class-name

行的className的回調方法, 也可以使用字符串為所有行設置一個固定的className。

Function({row, rowIndex})/String

row-style

行的style的回調方法, 也可以使用一個固定的Object為所有行設置一樣的Style。

Function({row, rowIndex})/Object

cell-class-name

單元格的className的回調方法, 也可以使用字符串為所有單元格設置一個固定的className。

Function({row, column, rowIndex, columnIndex})/String

cell-style

單元格的style的回調方法, 也可以使用一個固定的Object為所有單元格設置一樣的Style。

Function({row, column, rowIndex, columnIndex})/Object

header-row-class-name

表頭行的className的回調方法, 也可以使用字符串為所有表頭行設置一個固定的className。

Function({row, rowIndex})/String

header-row-style

表頭行的style的回調方法, 也可以使用一個固定的Object為所有表頭行設置一樣的Style。

Function({row, rowIndex})/Object

header-cell-class-name

表頭單元格的className的回調方法, 也可以使用字符串為所有表頭單元格設置一個固定的className。

Function({row, column, rowIndex, columnIndex})/String

header-cell-style

表頭單元格的style的回調方法, 也可以使用一個固定的Object為所有表頭單元格設置一樣的Style。

Function({row, column, rowIndex, columnIndex})/Object

row-key

行數據的Key, 用來優化Table的渲染; 在使用reserve-selection功能與顯示樹形數據時, 該屬性是必填的。類型為String時, 支持多層訪問: user.info.id, 但不支持user.info[0].id, 此種情況請使用Function。

Function(row)/String

empty-text

空數據時顯示的文本內容, 也可以通過slot="empty"設置

String

暫無數據

default-expand-all

是否默認展開所有行, 當Table包含展開行存在或者為樹形表格時有效

Boolean

false

expand-row-keys

可以通過該屬性設置Table目前的展開行, 需要設置row-key屬性才能使用, 該屬性為展開行的keys數組。

Array

default-sort

默認的排序列的prop和順序。它的prop屬性指定默認的排序的列, order指定默認排序的順序

Object

order: ascending, descending

如果只指定了prop, 沒有指定order, 則默認順序是ascending

tooltip-effect

tooltipeffect屬性

String

dark/light

show-summary

是否在表尾顯示合計行

Boolean

false

sum-text

合計行第一列的文本

String

合計

summary-method

自定義的合計計算方法

Function({ columns, data })

span-method

合并行或列的計算方法

Function({ row, column, rowIndex, columnIndex })

select-on-indeterminate

在多選表格中, 當僅有部分行被選中時, 點擊表頭的多選框時的行為。若為true, 則選中所有行; 若為false, 則取消選擇所有行

Boolean

true

indent

展示樹形數據時, 樹節點的縮進

Number

16

lazy

是否懶加載子節點數據

Boolean

load

加載子節點數據的函數, lazy為true時生效, 函數第二個參數包含了節點的層級信息

Function(row, treeNode, resolve)

tree-props

渲染嵌套數據的配置選項

Object

{ hasChildren: 'hasChildren', children: 'children' }

1.3. Table Events

事件名

說明

參數

select

當用戶手動勾選數據行的Checkbox時觸發的事件

selection, row

select-all

當用戶手動勾選全選Checkbox時觸發的事件

selection

selection-change

當選擇項發生變化時會觸發該事件

selection

cell-mouse-enter

當單元格hover進入時會觸發該事件

row, column, cell, event

cell-mouse-leave

當單元格hover退出時會觸發該事件

row, column, cell, event

cell-click

當某個單元格被點擊時會觸發該事件

row, column, cell, event

cell-dblclick

當某個單元格被雙擊擊時會觸發該事件

row, column, cell, event

row-click

當某一行被點擊時會觸發該事件

row, column, event

row-contextmenu

當某一行被鼠標右鍵點擊時會觸發該事件

row, column, event

row-dblclick

當某一行被雙擊時會觸發該事件

row, column, event

header-click

當某一列的表頭被點擊時會觸發該事件

column, event

header-contextmenu

當某一列的表頭被鼠標右鍵點擊時觸發該事件

column, event

sort-change

當表格的排序條件發生變化的時候會觸發該事件

{ column, prop, order }

filter-change

當表格的篩選條件發生變化的時候會觸發該事件, 參數的值是一個對象, 對象的key是column的columnKey, 對應的value為用戶選擇的篩選條件的數組。

filters

current-change

當表格的當前行發生變化的時候會觸發該事件, 如果要高亮當前行, 請打開表格的highlight-current-row屬性

currentRow, oldCurrentRow

header-dragend

當拖動表頭改變了列的寬度的時候會觸發該事件

newWidth, oldWidth, column, event

expand-change

當用戶對某一行展開或者關閉的時候會觸發該事件(展開行時, 回調的第二個參數為expandedRows; 樹形表格時第二參數為expanded)

row, (expandedRows | expanded)

1.4. Table Methods

方法名

說明

參數

clearSelection

用于多選表格, 清空用戶的選擇

toggleRowSelection

用于多選表格, 切換某一行的選中狀態, 如果使用了第二個參數, 則是設置這一行選中與否(selected為true則選中)

row, selected

toggleAllSelection

用于多選表格, 切換所有行的選中狀態

toggleRowExpansion

用于可展開表格與樹形表格, 切換某一行的展開狀態, 如果使用了第二個參數, 則是設置這一行展開與否(expanded為true則展開)

row, expanded

setCurrentRow

用于單選表格, 設定某一行為選中行, 如果調用時不加參數, 則會取消目前高亮行的選中狀態。

row

clearSort

用于清空排序條件, 數據會恢復成未排序的狀態

clearFilter

不傳入參數時用于清空所有過濾條件, 數據會恢復成未過濾的狀態, 也可傳入由columnKey組成的數組以清除指定列的過濾條件

columnKey

doLayout

對Table進行重新布局。當Table或其祖先元素由隱藏切換為顯示時, 可能需要調用此方法

sort

手動對Table進行排序。參數prop屬性指定排序列, order指定排序順序。

prop: string, order: string

1.5. Table Slot

name

說明

append

插入至表格最后一行之后的內容, 如果需要對表格的內容進行無限滾動操作, 可能需要用到這個slot。若表格有合計行, 該slot會位于合計行之上。

1.6. Table-column Attributes

參數

說明

類型

可選值

默認值

type

對應列的類型。如果設置了selection則顯示多選框; 如果設置了index則顯示該行的索引(從1開始計算); 如果設置了expand則顯示為一個可展開的按鈕

string

selection/index/expand

index

如果設置了type=index, 可以通過傳遞index屬性來自定義索引

number, Function(index)

column-key

column的key, 如果需要使用filter-change事件, 則需要此屬性標識是哪個column的篩選條件

string

label

顯示的標題

string

prop

對應列內容的字段名, 也可以使用property屬性

string

width

對應列的寬度

string

min-width

對應列的最小寬度, 與width的區別是width是固定的, min-width會把剩余寬度按比例分配給設置了min-width的列

string

fixed

列是否固定在左側或者右側, true表示固定在左側

string, boolean

true, left, right

render-header

列標題Label區域渲染使用的Function

Function(h, { column, $index })

sortable

對應列是否可以排序, 如果設置為'custom', 則代表用戶希望遠程排序, 需要監聽Table的sort-change事件

boolean, string

true, false, 'custom'

false

sort-method

對數據進行排序的時候使用的方法, 僅當sortable設置為true的時候有效, 需返回一個數字, 和Array.sort表現一致

Function(a, b)

sort-by

指定數據按照哪個屬性進行排序, 僅當sortable設置為true且沒有設置sort-method的時候有效。如果sort-by為數組, 則先按照第1個屬性排序, 如果第1個相等, 再按照第2個排序, 以此類推

String/Array/Function(row, index)

sort-orders

數據在排序時所使用排序策略的輪轉順序, 僅當sortable為true時有效。需傳入一個數組, 隨著用戶點擊表頭, 該列依次按照數組中元素的順序進行排序

array

數組中的元素需為以下三者之一: ascending表示升序, descending表示降序, null表示還原為原始順序

['ascending', 'descending', null]

resizable

對應列是否可以通過拖動改變寬度(需要在el-table上設置border屬性為真)

boolean

true

formatter

用來格式化內容

Function(row, column, cellValue, index)

show-overflow-tooltip

當內容過長被隱藏時顯示tooltip

Boolean

false

align

對齊方式

String

left/center/right

left

header-align

表頭對齊方式, 若不設置該項, 則使用表格的對齊方式

String

left/center/right

class-name

列的className

string

label-class-name

當前列標題的自定義類名

string

selectable

僅對type=selection的列有效, 類型為Function, Function的返回值用來決定這一行的CheckBox是否可以勾選

Function(row, index)

reserve-selection

僅對type=selection的列有效, 類型為Boolean, 為true則會在數據更新之后保留之前選中的數據(需指定row-key)

Boolean

false

filters

數據過濾的選項, 數組格式, 數組中的元素需要有text和value屬性。

Array[{ text, value }]

filter-placement

過濾彈出框的定位

String

與Tooltip的placement屬性相同

filter-multiple

數據過濾的選項是否多選

Boolean

true

filter-method

數據過濾使用的方法, 如果是多選的篩選項, 對每一條數據會執行多次, 任意一次返回true就會顯示。

Function(value, row, column)

filtered-value

選中的數據過濾項, 如果需要自定義表頭過濾的渲染方式, 可能會需要此屬性。

Array

1.7. Table-column Scoped Slot

name

說明

自定義列的內容, 參數為{ row, column, $index }

header

自定義表頭的內容.參數為{ column, $index }

2. Table表格例子

2.1. 使用腳手架新建一個名為element-ui-table的前端項目, 同時安裝Element插件。

2.2. 編輯index.js?

import Vue from 'vue' import VueRouter from 'vue-router' import BaseTable from '../components/BaseTable.vue' import StripeTable from '../components/StripeTable.vue' import HighlightTable from '../components/HighlightTable.vue' import BorderTable from '../components/BorderTable.vue' import FixHeadTable from '../components/FixHeadTable.vue' import FixColTable from '../components/FixColTable.vue' import FixHeadColTable from '../components/FixHeadColTable.vue' import MaxHeightTable from '../components/MaxHeightTable.vue' import MultiHeadTable from '../components/MultiHeadTable.vue' import RadioTable from '../components/RadioTable.vue' import CheckboxTable from '../components/CheckboxTable.vue' import SortTable from '../components/SortTable.vue' import FiltersTable from '../components/FiltersTable.vue' import ScopedTable from '../components/ScopedTable.vue' import ExpandTable from '../components/ExpandTable.vue' import ShowSummaryTable from '../components/ShowSummaryTable.vue' import SpanMethodTable from '../components/SpanMethodTable.vue' import IndexTable from '../components/IndexTable.vue'Vue.use(VueRouter)const routes = [{ path: '/', redirect: '/BaseTable' },{ path: '/BaseTable', component: BaseTable },{ path: '/StripeTable', component: StripeTable },{ path: '/HighlightTable', component: HighlightTable },{ path: '/BorderTable', component: BorderTable },{ path: '/FixHeadTable', component: FixHeadTable },{ path: '/FixColTable', component: FixColTable },{ path: '/FixHeadColTable', component: FixHeadColTable },{ path: '/MaxHeightTable', component: MaxHeightTable },{ path: '/MultiHeadTable', component: MultiHeadTable },{ path: '/RadioTable', component: RadioTable },{ path: '/CheckboxTable', component: CheckboxTable },{ path: '/SortTable', component: SortTable },{ path: '/FiltersTable', component: FiltersTable },{ path: '/ScopedTable', component: ScopedTable },{ path: '/ExpandTable', component: ExpandTable },{ path: '/ShowSummaryTable', component: ShowSummaryTable },{ path: '/SpanMethodTable', component: SpanMethodTable },{ path: '/IndexTable', component: IndexTable } ]const router = new VueRouter({routes })export default router

2.3. 在components下創建BaseTable.vue

<template><div><h1>基礎表格-基礎的表格展示用法</h1><h4>當el-table元素中注入data對象數組后, 在el-table-column中用prop屬性來對應對象中的鍵名即可填入數據, 用label屬性來定義表格的列名。可以使用width屬性來定義列寬。</h4><el-table :data="tableData" style="width: 50%"><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></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄'}]}} } </script>

2.4. 在components下創建StripeTable.vue

<template><div><h1>帶斑馬紋表格-使用帶斑馬紋的表格, 可以更容易區分出不同行的數據</h1><h4>stripe屬性可以創建帶斑馬紋的表格。它接受一個Boolean, 默認為false, 設置為true即為啟用。</h4><el-table :data="tableData" stripe style="width: 40%"><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></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄'}]}} } </script>

2.5. 在components下創建HighlightTable.vue

<template><div><h1>帶狀態表格-可將表格內容highlight顯示, 方便區分[成功、信息、警告、危險]等內容</h1><h4>可以通過指定Table組件的row-class-name屬性來為Table中的某一行添加class, 表明該行處于某種狀態。</h4><el-table :data="tableData" style="width: 50%" :row-class-name="tableRowClassName"><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></div> </template><style>.el-table .warning-row {background: oldlace;}.el-table .success-row {background: #f0f9eb;} </style><script> export default {methods: {tableRowClassName ({ row, rowIndex }) {if (rowIndex === 1) {return 'warning-row'} else if (rowIndex === 3) {return 'success-row'}return ''}},data () {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}]}} } </script>

2.6. 在components下創建BorderTable.vue

<template><div><h1>帶邊框表格</h1><h4>默認情況下, Table組件是不具有豎直方向的邊框的, 如果需要, 可以使用border屬性, 它接受一個Boolean, 設置為true即可啟用。</h4><el-table :data="tableData" border style="width: 50%"><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></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄'}]}} } </script>

2.7. 在components下創建FixHeadTable.vue

<template><div><h1>固定表頭-縱向內容過多時, 可選擇固定表頭</h1><h4>只要在el-table元素中定義了height屬性, 即可實現固定表頭的表格, 而不需要額外的代碼。</h4><el-table :data="tableData" height="250" border style="width: 40%"><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></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-08',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-06',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-07',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}]}} } </script>

2.8. 在components下創建FixColTable.vue

<template><div><h1>固定列-橫向內容過多時, 可選擇固定列</h1><h4>固定列需要使用fixed屬性, 它接受Boolean值或者left/right, 表示左邊固定還是右邊固定。</h4><el-table :data="tableData" border style="width: 30%"><el-table-column fixed prop="date" label="日期" width="150"></el-table-column><el-table-column prop="name" label="姓名" width="120"></el-table-column><el-table-column prop="province" label="省份" width="120"></el-table-column><el-table-column prop="city" label="市區" width="120"></el-table-column><el-table-column prop="address" label="地址" width="300"></el-table-column><el-table-column prop="zip" label="郵編" width="120"></el-table-column><el-table-column fixed="right" label="操作" width="100"><template slot-scope="scope"><el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button><el-button type="text" size="small">編輯</el-button></template></el-table-column></el-table></div> </template><script> export default {methods: {handleClick (row) {console.log(row)}},data () {return {tableData: [{date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1517 弄',zip: 200333}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1519 弄',zip: 200333}, {date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1516 弄',zip: 200333}]}} } </script>

2.9. 在components下創建FixHeadColTable.vue

<template><div><h1>固定列和表頭-橫縱內容過多時, 可選擇固定列和表頭</h1><h4>固定列和表頭可以同時使用, 只需要將上述兩個屬性分別設置好即可。</h4><el-table :data="tableData" style="width: 40%" height="250"><el-table-column fixed prop="date" label="日期" width="150"></el-table-column><el-table-column prop="name" label="姓名" width="120"></el-table-column><el-table-column prop="province" label="省份" width="120"></el-table-column><el-table-column prop="city" label="市區" width="120"></el-table-column><el-table-column prop="address" label="地址" width="300"></el-table-column><el-table-column prop="zip" label="郵編" width="120"></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-08',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-06',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-07',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}]}} } </script>

2.10. 在components下創建MaxHeightTable.vue

<template><div><h1>流體高度-當數據量動態變化時, 可以為Table設置一個最大高度</h1><h4>通過設置max-height屬性為Table指定最大高度。此時若表格所需的高度大于最大高度, 則會顯示一個滾動條。</h4><el-table :data="tableData" style="width: 50%" max-height="250"><el-table-column fixed prop="date" label="日期" width="150"></el-table-column><el-table-column prop="name" label="姓名" width="120"></el-table-column><el-table-column prop="province" label="省份" width="120"></el-table-column><el-table-column prop="city" label="市區" width="120"></el-table-column><el-table-column prop="address" label="地址" width="300"></el-table-column><el-table-column prop="zip" label="郵編" width="120"></el-table-column><el-table-column fixed="right" label="操作" width="120"><template slot-scope="scope"><el-button @click.native.prevent="deleteRow(scope.$index, tableData)" type="text" size="small">移除</el-button></template></el-table-column></el-table></div> </template><script> export default {methods: {deleteRow (index, rows) {rows.splice(index, 1)}},data () {return {tableData: [{date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-08',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-06',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-07',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}]}} } </script>

2.11. 在components下創建MultiHeadTable.vue

<template><div><h1>多級表頭-數據結構比較復雜的時候, 可使用多級表頭來展現數據的層次關系</h1><h4>只需要在el-table-column里面嵌套el-table-column, 就可以實現多級表頭。</h4><el-table :data="tableData" style="width: 50%"><el-table-column prop="date" label="日期" width="150"></el-table-column><el-table-column label="配送信息"><el-table-column prop="name" label="姓名" width="120"></el-table-column><el-table-column label="地址"><el-table-column prop="province" label="省份" width="120"></el-table-column><el-table-column prop="city" label="市區" width="120"></el-table-column><el-table-column prop="address" label="地址" width="300"></el-table-column><el-table-column prop="zip" label="郵編"></el-table-column></el-table-column></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-08',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-06',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}, {date: '2016-05-07',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333}]}} } </script>

2.12. 在components下創建RadioTable.vue

<template><div><h1>單選-選擇單行數據時使用色塊表示</h1><h4>Table組件提供了單選的支持, 只需要配置highlight-current-row屬性即可實現單選。之后由current-change事件來管理選中時觸發的事件, 它會傳入currentRow, oldCurrentRow。如果需要顯示索引, 可以增加一列el-table-column, 設置type屬性為index即可顯示從1開始的索引號。</h4><el-table ref="singleTable" :data="tableData" highlight-current-row @current-change="handleCurrentChange" style="width: 100%"><el-table-column type="index" width="50"></el-table-column><el-table-column property="date" label="日期" width="120"></el-table-column><el-table-column property="name" label="姓名" width="120"></el-table-column><el-table-column property="address" label="地址"></el-table-column></el-table><div style="margin-top: 20px"><el-button @click="setCurrent(tableData[1])">選中第二行</el-button><el-button @click="setCurrent()">取消選擇</el-button></div></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄'}],currentRow: null}},methods: {setCurrent (row) {this.$refs.singleTable.setCurrentRow(row)},handleCurrentChange (val) {this.currentRow = val}} } </script>

2.13. 在components下創建CheckboxTable.vue

<template><div><h1>多選-選擇多行數據時使用Checkbox</h1><h4>實現多選非常簡單: 手動添加一個el-table-column, 設type屬性為selection即可; 默認情況下若內容過多會折行顯示, 若需要單行顯示可以使用show-overflow-tooltip屬性, 它接受一個Boolean, 為true時多余的內容會在hover時以tooltip的形式顯示出來。</h4><el-table ref="multipleTable" :data="tableData" style="width: 20%" @selection-change="handleSelectionChange"><el-table-column type="selection" width="55"></el-table-column><el-table-column label="日期" width="120"><template slot-scope="scope">{{ scope.row.date }}</template></el-table-column><el-table-column prop="name" label="姓名" width="120"></el-table-column><el-table-column prop="address" label="地址" show-overflow-tooltip></el-table-column></el-table><div style="margin-top: 20px"><el-button @click="toggleSelection([tableData[1], tableData[2]])">切換第二、第三行的選中狀態</el-button><el-button @click="toggleSelection()">取消選擇</el-button></div></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-08',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-06',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-07',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}],multipleSelection: []}},methods: {toggleSelection (rows) {if (rows) {rows.forEach(row => {this.$refs.multipleTable.toggleRowSelection(row)})} else {this.$refs.multipleTable.clearSelection()}},handleSelectionChange (val) {this.multipleSelection = val}} } </script>

2.14. 在components下創建SortTable.vue

<template><div><h1>排序-對表格進行排序, 可快速查找或對比數據</h1><h4>在列中設置sortable屬性即可實現以該列為基準的排序, 接受一個Boolean, 默認為false。可以通過Table的default-sort屬性設置默認的排序列和排序順序。可以使用sort-method或者sort-by使用自定義的排序規則。如果需要后端排序, 需將sortable設置為custom, 同時在Table上監聽sort-change事件, 在事件回調中可以獲取當前排序的字段名和排序順序, 從而向接口請求排序后的表格數據。在本例中, 我們還使用了formatter屬性, 它用于格式化指定列的值, 接受一個Function, 會傳入四個參數: row, column, cellValue和index, 可以根據自己的需求進行處理。</h4><el-table :data="tableData" style="width: 100%" :default-sort = "{prop: 'date', order: 'descending'}"><el-table-column prop="date" label="日期" sortable width="180"></el-table-column><el-table-column prop="name" label="姓名" sortable width="180"></el-table-column><el-table-column prop="address" label="地址" :formatter="formatter"></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: 'd王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: 'b王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {date: '2016-05-01',name: 'a王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {date: '2016-05-03',name: 'c王小虎',address: '上海市普陀區金沙江路 1516 弄'}]}},methods: {formatter (row, column, cellValue, index) {return index + row.address}} } </script>

2.15. 在components下創建FiltersTable.vue

<template><div><h1>篩選-對表格進行篩選, 可快速查找到自己想看的數據</h1><h4>在列中設置filtersfilter-method屬性即可開啟該列的篩選, filters是一個數組, filter-method是一個方法, 它用于決定某些數據是否顯示, 會傳入三個參數: value, row和column。</h4><el-table ref="filterTable" :data="tableData" style="width: 40%"><el-table-column prop="date" label="日期" sortable width="180" column-key="date" :filters="dateFilter" :filter-method="filterHandler"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址" :formatter="formatter"></el-table-column><el-table-column prop="tag" label="標簽" width="100" :filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]" :filter-method="filterTag" filter-placement="right-start"><template slot-scope="scope"><el-tag :type="scope.row.tag === '家' ? 'primary' : 'success'" disable-transitions>{{scope.row.tag}}</el-tag></template></el-table-column></el-table><el-button @click="resetDateFilter">清除日期過濾器</el-button><el-button @click="clearFilter">清除所有過濾器</el-button></div> </template><script> export default {data () {return {dateFilter: [{ text: '2016-05-01', value: '2016-05-01' }, { text: '2016-05-02', value: '2016-05-02' }, { text: '2016-05-03', value: '2016-05-03' }, { text: '2016-05-04', value: '2016-05-04' }],tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄',tag: '家'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄',tag: '公司'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄',tag: '家'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄',tag: '公司'}]}},methods: {resetDateFilter () {this.$refs.filterTable.clearFilter('date')},clearFilter () {this.$refs.filterTable.clearFilter()},formatter (row, column) {return row.address},filterTag (value, row) {return row.tag === value},filterHandler (value, row, column) {const property = column.propertyreturn row[property] === value}} } </script>

2.16. 在components下創建ScopedTable.vue

<template><div><h1>自定義列模板-自定義列的顯示內容,可組合其他組件使用</h1><h4>通過Scoped slot可以獲取到row, column, $index和store(table內部的狀態管理)的數據。</h4><el-table :data="tableData" style="width: 30%"><el-table-column label="日期" width="180"><template slot-scope="scope"><i class="el-icon-time"></i><span style="margin-left: 10px">{{ scope.row.date }}</span></template></el-table-column><el-table-column label="姓名" width="180"><template slot-scope="scope"><el-popover trigger="hover" placement="top"><p>姓名: {{ scope.row.name }}</p><p>住址: {{ scope.row.address }}</p><div slot="reference" class="name-wrapper"><el-tag size="medium">{{ scope.row.name }}</el-tag></div></el-popover></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button size="mini" @click="handleEdit(scope.$index, scope.row)">編輯</el-button><el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">刪除</el-button></template></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄'}]}},methods: {handleEdit (index, row) {console.log(index, row)},handleDelete (index, row) {console.log(index, row)}} } </script>

2.17. 在components下創建ExpandTable.vue

<template><div><h1>展開行-當行內容過多并且不想顯示橫向滾動條時, 可以使用Table展開行功能</h1><h4>通過設置type="expand"和Scoped slot可以開啟展開行功能, el-table-column的模板會被渲染成為展開行的內容, 展開行可訪問的屬性與使用自定義列模板時的Scoped slot相同。</h4><el-table :data="tableData" style="width: 60%"><el-table-column type="expand"><template slot-scope="props"><el-form label-position="left" inline><el-form-item label="商品名稱"><span>{{ props.row.name }}</span></el-form-item><el-form-item label="所屬店鋪"><span>{{ props.row.shop }}</span></el-form-item><el-form-item label="商品 ID"><span>{{ props.row.id }}</span></el-form-item><el-form-item label="店鋪 ID"><span>{{ props.row.shopId }}</span></el-form-item><el-form-item label="商品分類"><span>{{ props.row.category }}</span></el-form-item><el-form-item label="店鋪地址"><span>{{ props.row.address }}</span></el-form-item><el-form-item label="商品描述"><span>{{ props.row.desc }}</span></el-form-item></el-form></template></el-table-column><el-table-column label="商品 ID" prop="id"></el-table-column><el-table-column label="商品名稱" prop="name"></el-table-column><el-table-column label="描述" prop="desc"></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{id: '12987122',name: '好滋好味雞蛋仔',category: '江浙小吃、小吃零食',desc: '荷蘭優質淡奶,奶香濃而不膩',address: '上海市普陀區真北路',shop: '王小虎夫妻店',shopId: '10333'}, {id: '12987123',name: '好滋好味雞蛋仔',category: '江浙小吃、小吃零食',desc: '荷蘭優質淡奶,奶香濃而不膩',address: '上海市普陀區真北路',shop: '王小虎夫妻店',shopId: '10333'}, {id: '12987125',name: '好滋好味雞蛋仔',category: '江浙小吃、小吃零食',desc: '荷蘭優質淡奶,奶香濃而不膩',address: '上海市普陀區真北路',shop: '王小虎夫妻店',shopId: '10333'}, {id: '12987126',name: '好滋好味雞蛋仔',category: '江浙小吃、小吃零食',desc: '荷蘭優質淡奶,奶香濃而不膩',address: '上海市普陀區真北路',shop: '王小虎夫妻店',shopId: '10333'}]}} } </script>

2.18. 在components下創建ShowSummaryTable.vue

<template><div><h1>表尾合計行-若表格展示的是各類數字, 可以在表尾顯示各列的合計</h1><h4>將show-summary設置為true就會在表格尾部展示合計行。默認情況下, 對于合計行, 第一列不進行數據求合操作, 而是顯示「合計」二字(可通過sum-text配置), 其余列會將本列所有數值進行求合操作, 并顯示出來。當然, 你也可以定義自己的合計邏輯。使用summary-method并傳入一個方法, 返回一個數組, 這個數組中的各項就會顯示在合計行的各列中, 具體可以參考本例中的第二個表格。</h4><el-table :data="tableData" border show-summary style="width: 100%"><el-table-column prop="id" label="ID" width="180"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="amount1" sortable label="數值 1"></el-table-column><el-table-column prop="amount2" sortable label="數值 2"></el-table-column><el-table-column prop="amount3" sortable label="數值 3"></el-table-column></el-table><el-table :data="tableData" border :summary-method="getSummaries" show-summary style="width: 100%; margin-top: 20px"><el-table-column prop="id" label="ID" width="180"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="amount1" label="數值 1(元)"></el-table-column><el-table-column prop="amount2" label="數值 2(元)"></el-table-column><el-table-column prop="amount3" label="數值 3(元)"></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{id: '12987122',name: '王小虎',amount1: '234',amount2: '3.2',amount3: 10}, {id: '12987123',name: '王小虎',amount1: '165',amount2: '4.43',amount3: 12}, {id: '12987124',name: '王小虎',amount1: '324',amount2: '1.9',amount3: 9}, {id: '12987125',name: '王小虎',amount1: '621',amount2: '2.2',amount3: 17}, {id: '12987126',name: '王小虎',amount1: '539',amount2: '4.1',amount3: 15}]}},methods: {getSummaries (param) {const { columns, data } = paramconst sums = []columns.forEach((column, index) => {if (index === 0) {sums[index] = '總價'return}const values = data.map(item => Number(item[column.property]))if (!values.every(value => isNaN(value))) {sums[index] = values.reduce((prev, curr) => {const value = Number(curr)if (!isNaN(value)) {return prev + curr} else {return prev}}, 0)sums[index] += ' 元'} else {sums[index] = 'N/A'}})return sums}} } </script>

2.19. 在components下創建SpanMethodTable.vue

<template><div><h1>合并行或列-多行或多列共用一個數據時, 可以合并行或列</h1><h4>通過給table傳入span-method方法可以實現合并行或列, 方法的參數是一個對象, 里面包含當前行row、當前列column、當前行號rowIndex、當前列號columnIndex四個屬性。該函數可以返回一個包含兩個元素的數組, 第一個元素代表rowspan, 第二個元素代表colspan。 也可以返回一個鍵名為rowspan和colspan的對象。</h4><el-table :data="tableData" :span-method="arraySpanMethod" border style="width: 100%"><el-table-column prop="id" label="ID" width="180"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="amount1" sortable label="數值 1"></el-table-column><el-table-column prop="amount2" sortable label="數值 2"></el-table-column><el-table-column prop="amount3" sortable label="數值 3"></el-table-column></el-table><el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px"><el-table-column prop="id" label="ID" width="180"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><el-table-column prop="amount1" label="數值 1(元)"></el-table-column><el-table-column prop="amount2" label="數值 2(元)"></el-table-column><el-table-column prop="amount3" label="數值 3(元)"></el-table-column></el-table></div> </template><script> export default {data () {return {tableData: [{id: '12987122',name: '王小虎',amount1: '234',amount2: '3.2',amount3: 10}, {id: '12987123',name: '王小虎',amount1: '165',amount2: '4.43',amount3: 12}, {id: '12987124',name: '王小虎',amount1: '324',amount2: '1.9',amount3: 9}, {id: '12987125',name: '王小虎',amount1: '621',amount2: '2.2',amount3: 17}, {id: '12987126',name: '王小虎',amount1: '539',amount2: '4.1',amount3: 15}]}},methods: {arraySpanMethod ({ row, column, rowIndex, columnIndex }) {if (rowIndex % 2 === 0) {if (columnIndex === 0) {return [1, 2]} else if (columnIndex === 1) {return [0, 0]}}},objectSpanMethod ({ row, column, rowIndex, columnIndex }) {if (columnIndex === 0) {if (rowIndex % 2 === 0) {return {rowspan: 2,colspan: 1}} else {return {rowspan: 0,colspan: 0}}}}} } </script>

2.20. 在components下創建IndexTable.vue

<template><div><h1>自定義索引-自定義type=index列的行號</h1><h4>通過給type=index的列傳入index屬性, 可以自定義索引。該屬性傳入數字時, 將作為索引的起始值。也可以傳入一個方法, 它提供當前行的行號(從0開始)作為參數, 返回值將作為索引展示。</h4><el-table :data="tableData" style="width: 100%"><el-table-column type="index" :index="indexMethod"></el-table-column><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></div> </template><script> export default {data () {return {tableData: [{date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1518 弄',zip: 200333,tag: '家'}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1517 弄',zip: 200333,tag: '公司'}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1519 弄',zip: 200333,tag: '家'}, {date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀區',address: '上海市普陀區金沙江路 1516 弄',zip: 200333,tag: '公司'}]}},methods: {indexMethod (index) {return index * 2}} } </script>

2.21. 運行項目, 訪問http://localhost:8080/#/BaseTable

2.22. 運行項目, 訪問http://localhost:8080/#/StripeTable?

2.23. 運行項目, 訪問http://localhost:8080/#/HighlightTable

2.24. 運行項目, 訪問http://localhost:8080/#/BorderTable?

2.25. 運行項目, 訪問http://localhost:8080/#/FixHeadTable?

2.26. 運行項目, 訪問http://localhost:8080/#/FixColTable?

2.27. 運行項目, 訪問http://localhost:8080/#/FixHeadColTable?

2.28. 運行項目, 訪問http://localhost:8080/#/MaxHeightTable?

2.29. 運行項目, 訪問http://localhost:8080/#/MultiHeadTable?

2.30. 運行項目, 訪問http://localhost:8080/#/RadioTable?

2.31. 運行項目, 訪問http://localhost:8080/#/CheckboxTable?

2.32. 運行項目, 訪問http://localhost:8080/#/SortTable?

2.33. 運行項目, 訪問http://localhost:8080/#/FiltersTable?

2.34. 運行項目, 訪問http://localhost:8080/#/ScopedTable

2.35. 運行項目, 訪問http://localhost:8080/#/ExpandTable?

2.36. 運行項目, 訪問http://localhost:8080/#/ShowSummaryTable?

2.37. 運行項目, 訪問http://localhost:8080/#/SpanMethodTable?

2.38. 運行項目, 訪問http://localhost:8080/#/IndexTable?

總結

以上是生活随笔為你收集整理的022_Table表格的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。